能“发现”或任何其他工具搜索文件广度优先?(Can 'find' or any ot

2019-07-29 17:15发布

有时候,我知道一个文件是不是那么深了,但一个非常密集的子目录不允许我找到我想要轻易的文件。

可以找到 (或任何其他工具)查找使用广度优先搜索的文件吗?

Answer 1:

是的,有点。

您可以使用-depth选项使它目录本身之前处理目录的内容。 您也可以使用-maxdepth选项来限制多少目录下它会钻。



Answer 2:

可怕的黑客,不会与工作-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返回非零状态或什么也不打印。



Answer 3:

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

创建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



Answer 4:

使用find--maxdepth选项。

这是在目录中的参考页部分; 可能会发现其他的选择更适合根据您的需要。

为了实现精确的广度优先搜索,你需要与混合回路--mindepth--maxdepth选项。 但是,我不认为这是必要的是精确,深度有限搜索就足够了。



Answer 5:

find . | awk '{FS = "/" ; print "", NF, $F}' | sort -n  | awk '{print $2}' | xargs grep -d skip "search term"

它使用发现,列出所有的文件。 第一个awk命令计算所有的“/”字符。 它排序的计数,然后滴数列。 最后,使用xargs的到grep文件的排序列表。

它实在是太丑了。



文章来源: Can 'find' or any other tool search for files breadth-first?