[英]Can 'find' or any other tool search for files breadth-first?
是的,有点。
您可以使用-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排序的文件列表。
这真的很难看。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.