使用空标志时查找命令排除隐藏文件

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 \
  \)