ファイルがそれほど深くないことを知っていることもありますが、サブディレクトリが非常に密集しているため、必要なファイルを簡単に見つけることができません。
幅優先探索を使用してファイルを検索(または他のツール)で検索できますか?
ファイルがそれほど深くないことを知っていることもありますが、サブディレクトリが非常に密集しているため、必要なファイルを簡単に見つけることができません。
幅優先探索を使用してファイルを検索(または他のツール)で検索できますか?
はい、そうですね。
この-depth
オプションを使用して、ディレクトリ自体の前にディレクトリの内容を処理するようにすることができます。このオプションを使用して、-maxdepth
ドリルダウンするディレクトリの数を制限することもできます。
恐ろしいハック、動作しない、-0
または 以外のアクション-print
、非効率など…</p>
#!/bin/bash
i=0
while results=$(find -mindepth $i -maxdepth $i "$@") && [[ -n $results ]]; do
echo "$results"
((i++))
done
基本的にこれは実行するだけです
find -mindepth 0 -maxdepth 0
find -mindepth 1 -maxdepth 1
find -mindepth 2 -maxdepth 2
…………………………………………………………………………
untilfind
はゼロ以外のステータスを返すか、何も出力しません。
variable をキューとして使用する幅優先検索。
作成bfs.sh
#!/bin/bash
queue="$1"
shift
while [ -n "$queue" ]
do
echo "$queue" | xargs -I'{}' find {} -mindepth 1 -maxdepth 1 $*
queue=`echo "$queue" | xargs -I'{}' find {} -mindepth 1 -maxdepth 1 -type d`
done
実行可能にします。
$ chmod u+x ./bfs.sh
次に、次の方法で幅優先検索を実行できます。
$ ./bfs.sh /path/to/somewhere -name foobar
オプションで使用find
し--maxdepth
ます。
これは、リファレンスページのディレクトリセクションにあります。ニーズに応じて、他のオプションがより適切であることがわかる場合があります。
正確な幅優先探索を実現するには、混合オプション--mindepth
と--maxdepth
オプションを使用してループする必要があります。しかし、正確である必要はないと思います。通常、深度を制限した検索で十分です。
find . | awk '{FS = "/" ; print "", NF, $F}' | sort -n | awk '{print $2}' | xargs grep -d skip "search term"
find を使用してすべてのファイルを一覧表示します。最初の awk コマンドは、すべての「/」文字をカウントします。カウントでソートしてから、カウント列をドロップします。最後に、xargs を使用して、ソートされたファイルのリストを grep します。
本当に醜いです。