fly*_*ire 29 linux bash command-line find
有时我知道文件不是那么深,但是一个非常密集的子目录不允许我轻松找到我想要的文件.
可以找到(或任何其他工具)使用广度优先搜索查找文件?
unw*_*ind 17
是的,有点.
您可以使用该-depth选项使其在目录本身之前处理目录的内容.您还可以使用该-maxdepth选项来限制将钻取的目录数量.
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返回非零状态或不打印任何内容.
广度优先使用变量作为其队列.
创建 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