Estoy en Fedora, y estos paquetes de voz están en una ubicación ligeramente 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
Simplemente puede modificar esto así:
$ ls /usr/share/festival/voices/*/ -1 | grep -vE "/usr|^$"
Usando find
El uso lsen esta mansión generalmente está mal visto porque la salida de lses difícil de analizar. Es mejor usar el findcomando, así:
$ 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
Detalles de find & basename
Este comando funciona produciendo una lista de rutas completas a los archivos que tienen exactamente 2 niveles de profundidad con respecto a este directorio:
/usr/share/festival/lib/voices
Esta lista se ve así:
$ 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
Pero queremos la última parte de estos directorios, el nodo hoja. Entonces podemos usar basenamepara analizarlo:
$ basename /usr/share/festival/lib/voices/us/nitech_us_awb_arctic_hts
nitech_us_awb_arctic_hts
Poniendo todo junto, podemos hacer que el findcomando pase cada directorio profundo de 2 niveles al basenamecomando. La notación basename {}es lo que está haciendo estas conversiones de nombre base. Encuentra llamadas a través de su -execinterruptor.