Eu usaria awk
para manipular e gerar a saída.
Aqui está um exemplo de se apossar das peças para você seguir em frente.
$:cat flist.fonts
Font1-Regular.ttf
Font1-Bold.ttf
Font2-SomeString-Regular.ttf
Font3.ttf
a crap line
$:cat doit.awk
/^.*\.ttf/ {
print NR, $0 # just prints the line number and line
if (match($0,/([^-]+)-(.+)\.ttf/,arr)) { # find the 2 halves
print "\tFirst part:", arr[1]
print "\t2nd part:", arr[2]
if (match(arr[2],/([^-]+)-(.*)/,part2_arr)){ # check 2nd half for -
print "\t\t2a:", part2_arr[1]
print "\t\t2b:", part2_arr[2]
} else {print "\t\tNo - in 2nd part"}
} else
print "\tNo hyphen in name ??"
}
$:awk -f doit.awk flist.fonts
1 Font1-Regular.ttf
First part: Font1
2nd part: Regular
No - in 2nd part
2 Font1-Bold.ttf
First part: Font1
2nd part: Bold
No - in 2nd part
3 Font2-SomeString-Regular.ttf
First part: Font2
2nd part: SomeString-Regular
2a: SomeString
2b: Regular
4 Font3.ttf
No hyphen in name ??
$:
Você pode usar o comando original find para gerar a lista de arquivos, por exemplo,
find . -type f "*.ttf" -print | awk -f doit.awk