如何让 GNU 'find'在目录树中找到文件名的*第一个*实例?



'-depth'全局开关被记录为强制搜索深度搜索,但是即使没有该开关,我似乎也获得了深度优先的搜索,这也不是我想要的。特别是,我希望它在中输出匹配的文件,然后再递归到子目录中。

注意在此示例中,它在之前找到12/keyboard -test/main.jack 它找到了12/键盘。

$ find . -name "*.jack"
./12/KeyboardTest/Main.jack
./12/Keyboard.jack
./12/Math.jack
./12/Screen.jack
./12/String.jack
./12/Output.jack
./12/Memory.jack
./12/MemoryTest/Main.jack
./12/Sys.jack
./12/ArrayTest/Main.jack
./12/SysTest/Main.jack
./12/ScreenTest/Main.jack
./12/OutputTest/Main.jack
./12/StringTest/Main.jack
./12/MathTest/Main.jack
./12/Array.jack

(我碰巧是在Cygwin下进行的;我不 Think 是相关的,但我提到了,以防万一。)

我当然可以写自己的bash或perl代码来做到这一点,但这似乎……过度?我必须忽略一种找到这样做的方法。

-Depth选项已找到目录本身之前的目录内容。目录中的内容是目录中的所有内容,无论是文件还是目录。这是:

之间的区别
foo
foo/file1
foo/dir
foo/dir/file
foo/file2

和:

foo/file1
foo/dir/file
foo/dir
foo/file2
foo

foo是在 foo中的项目之后的vs,而这些项目的顺序 file1file2dir是不变的。

查找不排序,因此将无法仅使用查找来完成您想要的事情。装饰,排序,未装修的模式可能对您有用。考虑通过-printf "%d %pn"将每个项目的深度及其深度前缀,然后将输出输送到排序-n。从上面的列表中,我们会得到:

$ find foo -name "file*" -printf "%d %pn" | sort -n
1 foo/file1
1 foo/file2
2 foo/dir/file

看起来像您想要的顺序。用"切割"或" awk"剥离深度数字,您有清单。如果您想在这些文件上运行命令,而不仅仅是列出它们。

在三个级别的深处,您可能找不到您所想到的那种命令,尽管它确实满足了您所陈述的要求。

1 foo/file1
2 foo/dir1/file
2 foo/dir2/file
3 foo/dir1/subdir/file

也许您真的希望最后两行的顺序相反。那会更难!

相关内容

  • 没有找到相关文章

最新更新