有时候,我知道一个文件是不是那么深了,但一个非常密集的子目录不允许我找到我想要轻易的文件。
可以找到 (或任何其他工具)查找使用广度优先搜索的文件吗?
有时候,我知道一个文件是不是那么深了,但一个非常密集的子目录不允许我找到我想要轻易的文件。
可以找到 (或任何其他工具)查找使用广度优先搜索的文件吗?
是的,有点。
您可以使用-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"
它使用发现,列出所有的文件。 第一个awk命令计算所有的“/”字符。 它排序的计数,然后滴数列。 最后,使用xargs的到grep文件的排序列表。
它实在是太丑了。