Я в 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|^$"
Використання знахідки
Застосування 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
Деталі пошуку та базової назви
Ця команда працює, створюючи список повних шляхів до файлів, що мають глибину точно на два рівні щодо цього каталогу:
/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
перемикача.