使用空标志时查找命令排除隐藏文件
Find Command Exclude Hidden files when using empty flag
我正在寻找一种使用 find 命令判断文件夹中是否没有文件的方法。我试过使用 -empty
标志,但由于我在 macOS 上,系统文件 OS 放在目录中,例如 .DS_Store
导致查找不考虑目录空的。我试过告诉 find 忽略 .DS_Store
但它仍然认为该目录不为空,因为该文件存在。
有没有办法让 find 从它认为的 -empty
中排除某些文件?还有没有办法找到 return 没有可见文件的目录列表?
-empty
predicate 相当简单,如果目录有除 .
或 ..
.
以外的任何条目,则为真
有点丑陋的解决方案,但您可以在每个目录中使用 -exec
到 运行 另一个 find
,这将实现您决定要包含哪些目录的标准。
以下:
- 外层
find
将为/starting/point
中的每个目录执行sh -c
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 "" -mindepth 1 -maxdepth 1 ! -name ".*" -print -quit | read' \
sh {} \; \
-o -print \
\)
我正在寻找一种使用 find 命令判断文件夹中是否没有文件的方法。我试过使用 -empty
标志,但由于我在 macOS 上,系统文件 OS 放在目录中,例如 .DS_Store
导致查找不考虑目录空的。我试过告诉 find 忽略 .DS_Store
但它仍然认为该目录不为空,因为该文件存在。
有没有办法让 find 从它认为的 -empty
中排除某些文件?还有没有办法找到 return 没有可见文件的目录列表?
-empty
predicate 相当简单,如果目录有除 .
或 ..
.
有点丑陋的解决方案,但您可以在每个目录中使用 -exec
到 运行 另一个 find
,这将实现您决定要包含哪些目录的标准。
以下:
- 外层
find
将为/starting/point
中的每个目录执行 sh
将使用不同的标准执行另一个find
。- 内部
find
会打印第一个匹配然后退出 read
将消耗内部find
的输出(如果有的话)。read
仅当内部find
打印至少一行时才会有 0 的退出状态,否则为非零- 如果内部
find
没有输出,外部find
的-exec
谓词将计算为 false - 因为
-exec
后面跟着-o
,下面的-print
操作将只对那些不符合内部find
标准的目录执行
sh -c
find /starting/point \
-type d \( \
-exec sh -c \
'find "" -mindepth 1 -maxdepth 1 ! -name ".*" -print -quit | read' \
sh {} \; \
-o -print \
\)