30

ファイルがそれほど深くないことを知っていることもありますが、サブディレクトリが非常に密集しているため、必要なファイルを簡単に見つけることができません。

幅優先探索を使用してファイルを検索(または他のツール)で検索できますか?

4

5 に答える 5

19

はい、そうですね。

この-depthオプションを使用して、ディレクトリ自体の前にディレクトリの内容を処理するようにすることができます。このオプションを使用して、-maxdepthドリルダウンするディレクトリの数を制限することもできます。

于 2009-07-06T13:24:05.183 に答える
10

恐ろしいハック、動作しない、-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はゼロ以外のステータスを返すか、何も出力しません。

于 2009-07-06T17:54:35.970 に答える
6

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

于 2014-05-30T06:07:34.157 に答える
4

オプションで使用find--maxdepthます。

これは、リファレンスページのディレクトリセクションにあります。ニーズに応じて、他のオプションがより適切であることがわかる場合があります。

正確な幅優先探索を実現するには、混合オプション--mindepth--maxdepthオプションを使用してループする必要があります。しかし、正確である必要はないと思います。通常、深度を制限した検索で十分です。

于 2009-07-06T13:22:27.340 に答える
0
find . | awk '{FS = "/" ; print "", NF, $F}' | sort -n  | awk '{print $2}' | xargs grep -d skip "search term"

find を使用してすべてのファイルを一覧表示します。最初の awk コマンドは、すべての「/」文字をカウントします。カウントでソートしてから、カウント列をドロップします。最後に、xargs を使用して、ソートされたファイルのリストを grep します。

本当に醜いです。

于 2016-02-09T14:59:51.290 に答える