我正在寻找一种使用 find 命令来判断文件夹中是否没有文件的方法。我曾尝试使用 -empty
标志,但由于我在 macOS 上,操作系统放置在目录中的系统文件(例如 .DS_Store
导致 find 不认为目录为空。我曾尝试告诉 find 忽略 .DS_Store
但它仍然认为目录不为空,因为该文件存在。
有没有办法让 find 从它认为的 -empty
中排除某些文件?还有没有办法让 find 返回一个没有可见文件的目录列表?
答案 0 :(得分:1)
-empty
predicate 相当简单,如果目录具有除 .
或 ..
以外的任何条目,则适用。
有点丑陋的解决方案,但您可以使用 -exec
在每个目录中运行另一个 find
,这将实现您决定要包含哪些目录的标准。
以下:
find
将为 sh -c
中的每个目录执行 /starting/point
sh
将执行另一个具有不同条件的 find
。find
将打印第一个匹配项,然后退出read
将消耗内部 find
的输出(如果有)。仅当内部 read
打印至少一行时,find
的退出状态才会为 0,否则为非零find
没有输出,外部 find
的 -exec
谓词将评估为 false-exec
后面跟着 -o
,所以下面的 -print
动作只会对那些与内部 find
的条件不匹配的目录执行find /starting/point \
-type d \( \
-exec sh -c \
'find "$1" -mindepth 1 -maxdepth 1 ! -name ".*" -print -quit | read' \
sh {} \; \
-o -print \
\)