繁体   English   中英

可以“找到”或任何其他工具搜索文件广度优先吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM