Tho*_*nry 40 bash shell gnu find
我正在尝试使用GNU find来查找不包含其他目录的目录,但可能包含也可能不包含常规文件.
到目前为止,我最好的猜测是:
find dir -type d \( -not -exec ls -dA ';' \)
Run Code Online (Sandbox Code Playgroud)
但这只是给我一长串"."
谢谢!
Syl*_*sne 78
如果您的文件系统符合POSIX,则可以使用-links(即,目录中包含每个子目录的链接,来自其父级的链接和指向self的链接,因此如果没有子目录,则计数为2个链接).
以下命令应该执行您想要的操作:
find dir -type d -links 2
Run Code Online (Sandbox Code Playgroud)
但是,它似乎不适用于Mac OS X(正如@Piotr所提到的).这是另一个较慢的版本,但可以在Mac OS X上运行.它基于他的版本,通过更正来处理目录名称中的空格:
find . -type d -exec sh -c '(ls -p "{}"|grep />/dev/null)||echo "{}"' \;
Run Code Online (Sandbox Code Playgroud)
我刚刚发现了另一种适用于Linux和macOS(无find -exec)的解决方案!
它涉及sort(两次)和awk:
find dir -type d | sort -r | awk 'a!~"^"$0{a=$0;print}' | sort
Run Code Online (Sandbox Code Playgroud)
find以相反的顺序对输出进行排序
使用awk省略行,如果当前行是前一行的前缀
sort他们(所以它看起来像正常的find输出)