Sono su Fedora e questi voice pack si trovano in una posizione leggermente diversa:
$ 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
Puoi semplicemente modificarlo in questo modo:
$ ls /usr/share/festival/voices/*/ -1 | grep -vE "/usr|^$"
Utilizzando find
L'uso ls
in questo maniero è generalmente disapprovato perché l'output di ls
è difficile da analizzare. Meglio usare il find
comando, in questo modo:
$ 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
Dettagli di find & basename
Questo comando funziona producendo un elenco di percorsi completi per i file che hanno esattamente 2 livelli di profondità rispetto a questa directory:
/usr/share/festival/lib/voices
Questo elenco è simile al seguente:
$ 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
Ma vogliamo l'ultima parte di queste directory, il nodo foglia. Quindi possiamo usarlo basename
per analizzarlo:
$ basename /usr/share/festival/lib/voices/us/nitech_us_awb_arctic_hts
nitech_us_awb_arctic_hts
Mettendo tutto insieme, possiamo fare in modo che il find
comando passi ogni directory profonda a 2 livelli al basename
comando. La notazione basename {}
è ciò che sta facendo queste conversioni di basename. Trova lo chiama tramite il suo -exec
interruttore.