Eu estou no Fedora e essas voicepacks estão em um local um pouco diferente:
$ ls /usr/share/festival/lib/voices/*/ -1 | grep -vE "/usr|^$"
kal_diphone
ked_diphone
nitech_us_awb_arctic_hts
nitech_us_bdl_arctic_hts
nitech_us_clb_arctic_hts
nitech_us_jmk_arctic_hts
nitech_us_rms_arctic_hts
nitech_us_slt_arctic_hts
Você pode modificar isso da seguinte maneira:
$ ls /usr/share/festival/voices/*/ -1 | grep -vE "/usr|^$"
Usando o find
O uso de ls
nessa mansão geralmente é desaprovado porque a saída de ls
é difícil de analisar. Melhor usar o comando find
, da seguinte forma:
$ find /usr/share/festival/lib/voices -maxdepth 2 -mindepth 2 \
-type d -exec basename {} \;
nitech_us_awb_arctic_hts
nitech_us_bdl_arctic_hts
nitech_us_slt_arctic_hts
nitech_us_jmk_arctic_hts
nitech_us_clb_arctic_hts
nitech_us_rms_arctic_hts
ked_diphone
kal_diphone
Detalhes de encontrar & basename
Este comando funciona produzindo uma lista de caminhos completos para arquivos com exatamente 2 níveis de profundidade em relação a este diretório:
/usr/share/festival/lib/voices
Esta lista é assim:
$ find /usr/share/festival/lib/voices -maxdepth 2 -mindepth 2
/usr/share/festival/lib/voices/us/nitech_us_awb_arctic_hts
/usr/share/festival/lib/voices/us/nitech_us_bdl_arctic_hts
/usr/share/festival/lib/voices/us/nitech_us_slt_arctic_hts
/usr/share/festival/lib/voices/us/nitech_us_jmk_arctic_hts
/usr/share/festival/lib/voices/us/nitech_us_clb_arctic_hts
/usr/share/festival/lib/voices/us/nitech_us_rms_arctic_hts
/usr/share/festival/lib/voices/english/ked_diphone
/usr/share/festival/lib/voices/english/kal_diphon
Mas queremos a última parte desses diretórios, o nó folha. Portanto, podemos usar basename
para analisá-lo:
$ basename /usr/share/festival/lib/voices/us/nitech_us_awb_arctic_hts
nitech_us_awb_arctic_hts
Juntando tudo, podemos fazer com que o comando find
passe cada diretório deep de 2 níveis para o comando basename
. A notação basename {}
é o que está fazendo essas conversões de nome de base. Find chama por meio de sua -exec
switch.