可以'find'或任何其他工具search宽度优先的文件?

有时我知道一个文件不是很深,但是一个非常密集的子目录不允许我find我想要的文件。

可以find (或任何其他工具)使用广度优先search查找文件?

Solutions Collecting From Web of "可以'find'或任何其他工具search宽度优先的文件?"

是的,有点。

您可以使用-depth选项使其在目录本身之前处理目录的内容。 您也可以使用-maxdepth选项来限制它将钻取的目录数量。

可怕的黑客,将不会与-0或除了-print ,效率低下等任何行动… …

 #!/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 ………………………………………………………………………… 

直到find返回非零状态或不打印任何东西。

广度优先使用变量作为其队列。

创建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排序的文件列表。

这真的很丑。