時々私はファイルが深くないことを知っていますが、非常に密度の高いサブディレクトリでは、私が簡単に望むファイルを見つけることができません。breadth-firstファイルを 'find'または他のツールで検索できますか?
find(または他のツール)は、幅優先検索を使用してファイルを検索できますか?
時々私はファイルが深くないことを知っていますが、非常に密度の高いサブディレクトリでは、私が簡単に望むファイルを見つけることができません。breadth-firstファイルを 'find'または他のツールで検索できますか?
find(または他のツール)は、幅優先検索を使用してファイルを検索できますか?
ありがとうございます。
オプションを使用すると、ディレクトリ自体の前にディレクトリの内容を処理することができます。 -maxdepth
オプションを使用して、ドリルダウンするディレクトリの数を制限することもできます。
find
を--maxdepth
オプションで使用してください。
参考ページのDirectoriesセクションにあります。あなたのニーズに応じて、他のオプションがより適しているかもしれません。
最初の検索を正確に行うには、--mindepth
と--maxdepth
のオプションを組み合わせてループする必要があります。しかし、私はそれが正確である必要はないと思う、深さの限られた検索は通常十分である。
恐ろしいハックは、...などなど、非効率的、-0
または-print
以外の任意のアクションを
#!/bin/bash
i=0
while results=$(find -mindepth $i -maxdepth $i "[email protected]") && [[ -n $results ]]; do
echo "$results"
((i++))
done
を動作しません基本的にこれはちょうど
find -mindepth 0 -maxdepth 0
find -mindepth 1 -maxdepth 1
find -mindepth 2 -maxdepth 2
…………………………………………………………………………
find
まで戻り、ゼロ以外を実行しますステータスを表示するか、何も印刷しません。
[反復深さ優先検索](http://en.wikipedia.org/wiki/Iterative_deepening_depth-first_search)のように見えます... –
@MattLuongo:あなたのリンクから: "IDDFSは幅優先検索と同じですが、メモリははるかに少ない; " –
@MooingDuck私はそれが特定の名前を持っていることを指摘して、これがうまくいかないとは反対していませんでした。 IDFSはまた、毎回ツリー上の以前のレベルを再トラバースする必要があるため、BFSよりも遅い。私が聞いた議論は、ほとんどの検索問題ではランタイムコストは 'n + 1 'をトラバースするコストに支配されているので、それはしばしば価値があります。 –
変数をキューとして使用する、幅優先検索。
それが実行可能に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 . | awk '{FS = "/" ; print "", NF, $F}' | sort -n | awk '{print $2}' | xargs grep -d skip "search term"
findを使用してすべてのファイルを一覧表示します。最初のawkコマンドはすべての '/'文字をカウントします。それはカウントでソートし、カウントの列をドロップします。最後に、ファイルのソートされたリストをgrepするためにxargsを使用します。
これは本当に醜いです。
まだこのようなことを探している場合は、[this](https://github.com/tavianator/bfs)と書いてください。 –
** find **コマンドの "prune"オプションをマスターしている間あなたはそれにいます。探しているオブジェクト - ファイルまたはディレクトリ - を知っているときに、深く根づいていて、人口密度の高いディレクトリサブツリーの深さ優先の再帰的な検索に没頭するのは意味がありません。 –