在Unix/Linux中查找没有文件的目录

9
我有一个目录列表。
/home
  /dir1
  /dir2
  ...
  /dir100

其中一些文件夹内没有任何文件。我该如何使用Unix的find命令来解决这个问题?

我尝试了:

find . -name "*" -type d -size 0 

似乎无法正常工作。

5个回答

18

您的查找是否具有谓词-empty

您应该可以使用find . -type d -empty


2

如果你是zsh用户,你总是可以这样做。如果你不是,也许这会说服你:

echo **/*(/^F)

**/* 会展开到当前工作目录下的每个子节点,() 是一个 glob 限定符。 / 限制匹配到目录,F 限制匹配到非空目录。使用 ^ 取反可以得到所有空目录。更多详情请参考 zshexpn 手册。


1

请注意,如果您打算删除目录,则可以使用“find . -depth -type d -empty -delete”来删除整个空子树。 - Exp HP

1

你也可以使用:

find . -type d -links 2

在编程中,点号(.)和双点号(..)都被视为链接,文件也是如此。


0

Pimin Konstantin Kefalou的答案会打印只有2个链接和其他文件(d,f,...)的文件夹。

我发现最简单的方法是:

for directory in $(find . -type d); do
   if [ -n "$(find $directory -maxdepth 1 -type f)" ]; then echo "$directory"
   fi
done

如果您的文件夹名称中有空格,请在“$directory”中使用引号。

您可以将“.”替换为您的参考文件夹。

我尚未能够使用一个查找指令完成此操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接