.txt
ファイルを含むすべてのディレクトリを検索したいです。ただし、前のレベルを印刷する必要があります。
たとえば、再帰を使用して現在のディレクトリからファイルをfind
検索します。.txt
その後、そのファイルを含むディレクトリのみが表示されます。
find . -name "*.txt" -printf '%h\n'
(たとえば)に出力
./out/data
./out/data
./output/data
find
したがって、次の方法の使用を改善したいと思います。
.txt
重複したディレクトリは表示されません。 (その中に2つのファイルがあるためです。)最初のレイヤーだけを印刷したいです
./out/
。./output/
答え1
もっと中心的なアプローチがあるかもしれませんが、find
他のツールを使ってそれを助けることができます。
find . -name '*.txt' -printf '%h\n' | cut -f1,2 -d/ | sort -u
awk
または、プロシージャを保存して次のようなものを使用することもできます。
find . -name '*.txt' -printf '%h\n' | awk -F/ '{matched[$1"/"$2]=1} END {for(dir in matched) {print dir}}'
答え2
次のようなさらなる処理のために結果を別のツールに転送してみてはいかがでしょうか?
find . -name "*.txt" -printf '%h\n'| sort | uniq | cut -d'/' -f1,2
答え3
sed
パスの最初のディレクトリ名のみを保持し、同等実行のsort
最初の行のみを保持するために使用されます。
find . -name "*.txt" -printf '%h\n' |
sed -e 's#^\(\./[^/]*\).*#\1#' |
sort -u