Я на Fedora, и эти голосовые пакеты находятся в немного другом месте:
$ 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
Вы можете просто изменить это так:
$ ls /usr/share/festival/voices/*/ -1 | grep -vE "/usr|^$"
Используя find
Использование ls
в этом поместье, как правило, неодобрительно, потому что вывод ls
трудно анализировать. Лучше использовать find
команду, например так:
$ 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
Детали поиска и базовое имя
Эта команда работает путем создания списка полных путей к файлам, которые имеют ровно 2 уровня по отношению к этому каталогу:
/usr/share/festival/lib/voices
Этот список выглядит так:
$ 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
Но нам нужна последняя часть этих каталогов, конечный узел. Таким образом, мы можем использовать его basename
для анализа:
$ basename /usr/share/festival/lib/voices/us/nitech_us_awb_arctic_hts
nitech_us_awb_arctic_hts
Собрав все это вместе, мы можем заставить find
команду передавать каждый 2-х уровневый каталог в basename
команду. Обозначение basename {}
- то, что делает эти преобразования базового имени. Найти звонки через -exec
переключатель.