Jestem na Fedorze, a te pakiety głosowe znajdują się w nieco innej lokalizacji:
$ 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
Możesz to zmodyfikować w następujący sposób:
$ ls /usr/share/festival/voices/*/ -1 | grep -vE "/usr|^$"
Używanie znajdź
Używanie ls
w tym dworze jest zwykle niezadowolone, ponieważ wynik ls
jest trudny do przeanalizowania. Lepiej użyć find
polecenia, tak:
$ 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
Szczegóły find & basename
To polecenie działa, tworząc listę pełnych ścieżek do plików o głębokości dokładnie 2 poziomów w odniesieniu do tego katalogu:
/usr/share/festival/lib/voices
Ta lista wygląda następująco:
$ 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
Ale chcemy ostatnią część tych katalogów, węzeł liścia. Możemy więc wykorzystać to basename
do przeanalizowania:
$ basename /usr/share/festival/lib/voices/us/nitech_us_awb_arctic_hts
nitech_us_awb_arctic_hts
Podsumowując, możemy sprawić, że find
polecenie przekaże każdemu głębokiemu katalogowi 2 poziomy do basename
polecenia. Notacja basename {}
jest tym, co robi te konwersje basename. Znajdź połączenia za pomocą -exec
przełącznika.