30

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

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

4

5 回答 5

19

是的,有点。

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

于 2009-07-06T13:24:05.183 回答
10

可怕的 hack,无法使用或除、低效 -0等以外的任何操作……</p>-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返回非零状态或不打印任何内容。

于 2009-07-06T17:54:35.970 回答
6

使用变量作为队列的广度优先查找。

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

于 2014-05-30T06:07:34.157 回答
4

find--maxdepth选项 一起使用。

那是在您的参考页面的目录部分;可能会根据您的需要找到其他更合适的选项。

要实现精确的广度优先搜索,您需要循环使用混合--mindepth--maxdepth选项。但是,我认为没有必要那么精确,深度有限的搜索通常就足够了。

于 2009-07-06T13:22:27.340 回答
0
find . | awk '{FS = "/" ; print "", NF, $F}' | sort -n  | awk '{print $2}' | xargs grep -d skip "search term"

它使用 find 列出所有文件。第一个 awk 命令计算所有的 '/' 字符。它对计数进行排序,然后删除计数列。最后,它使用 xargs 来 grep 排序的文件列表。

真的很丑。

于 2016-02-09T14:59:51.290 回答