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

fly*_*ire 29 linux bash command-line find

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

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

unw*_*ind 17

是的,有点.

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

  • "有点"是对的 - 这仍然不是真正的广度优先搜索,因为a/b/c将在a/d之前被访问.但是,对于大多数用途来说已经足够 (3认同)
  • 这仍然不是广泛的第一次搜索.这只是有限深度的第一次搜索.有限深度优先搜索确实解决了找到"文件不那么深"的问题,但是这绝对不是广泛的第一次搜索. (3认同)

eph*_*ent 10

可怕的黑客攻击,无法使用-0或除了-print效率低下等任何行为等...

#!/bin/bash
i=0
while results=$(find -mindepth $i -maxdepth $i "$@") && [[ -n $results ]]; do
    echo "$results"
    ((i++))
done
Run Code Online (Sandbox Code Playgroud)

基本上这只是运行

find -mindepth 0 -maxdepth 0
find -mindepth 1 -maxdepth 1
find -mindepth 2 -maxdepth 2
…………………………………………………………………………
Run Code Online (Sandbox Code Playgroud)

直到find返回非零状态或不打印任何内容.

  • 看起来像[迭代深度优先搜索](http://en.wikipedia.org/wiki/Iterative_deepening_depth-first_search)给我... (4认同)
  • @MattLuongo:从您的链接:"IDDFS相当于广度优先搜索,但使用的内存更少;" (2认同)

Jet*_* Yu 5

广度优先使用变量作为其队列.

创建 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
Run Code Online (Sandbox Code Playgroud)

使其可执行:

$ chmod u+x ./bfs.sh

然后,您可以通过以下方式进行广度优先查找:

$ ./bfs.sh /path/to/somewhere -name foobar