ディレクトリ検索時の検索深度の変更

ディレクトリ検索時の検索深度の変更

.txtファイルを含むすべてのディレクトリを検索したいです。ただし、前のレベルを印刷する必要があります。

たとえば、再帰を使用して現在のディレクトリからファイルをfind検索します。.txtその後、そのファイルを含むディレクトリのみが表示されます。

find . -name "*.txt" -printf '%h\n'

(たとえば)に出力

./out/data
./out/data
./output/data

findしたがって、次の方法の使用を改善したいと思います。

  1. .txt重複したディレクトリは表示されません。 (その中に2つのファイルがあるためです。)

  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

関連情報