n レベル深さのサブディレクトリのみを一覧表示

n レベル深さのサブディレクトリのみを一覧表示

Festival は、次のディレクトリ構造の例に音声パケットデータを保存します。

/usr/share/festival/voices/<language>/<voicepack name>

できるだけ多くのサブディレクトリの中で最も簡単な1行(使用するのに最適ls)は何を印刷しますか?<voicepack name><language>

ベストアンサー1

私は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

検索と基本名の詳細

このコマンドは、ディレクトリに基づいて正確に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 {}これらの基本名変換を実行します。 Findはスイッチを介して呼び出します-exec

おすすめ記事