如何查找特定目录中的所有空文件和文件夹,包括看似空但实际上不是空的文件?

如何查找特定目录中的所有空文件和文件夹,包括看似空但实际上不是空的文件?

假设我的文件夹中~/list有大量文件夹,每个文件夹都有自己的子文件夹和子子文件夹等,并且几乎每个级别都有很多文件。但是其中一些文件和文件夹是空的,那么我如何才能递归搜索它们以找到空文件和文件夹?然后将它们显示在文件位置列表中,以便我知道每个文件的位置(还应该清楚哪个是文件,哪个是文件夹,因为并非所有文件都有文件扩展名)。我正在运行带有 GNOME 3.18 的 Ubuntu GNOME 15.10。

请注意如果它能告诉我文件是否看起来是空的但实际上不是空的(例如,它里面是否有空格或换行符等),那也很有用。并且能区分真实的一个是空文件,另一个是输出中看起来为空的文件。

答案1

man find

    -empty File is empty and is either a regular file or a directory.

因此,要找到空文件和目录,只需执行以下操作即可

find ~/lists -empty

要指示类型,可以使用%y输出格式说明符

          %y     File's type (like in ls -l), U=unknown type (shouldn't happen)

例如

find ~/lists -empty -printf '%y %p\n'

或者使用类似的外部程序ls,其中包括一个--classify选项

    -F, --classify
          append indicator (one of */=>@|) to entries

IE

find ~/lists -empty -exec ls -Fd {} \;

如果你将“空”的定义扩展到仅包含空格字符的文件,那么它就会变得更加复杂,并且计算量更大,因为现在你需要实际打开至少任何非空文件并检查其内容。我能想到的最有效的方法是

find ~/list \( -empty -o \( -type f -a ! -exec grep -qm1 '[^[:blank:]]' {} \; \) \) -exec ls -Fd {} \;

(要么为空,要么为文件,并且 grep 未检测到至少一个非空白字符)。不过,可能还有更好的方法。

答案2

来自~/list文件夹:

find . -empty -type d

用于列出空目录和

find . -empty -type f

用于列出空文件。

find . -type f -exec bash -c 'if [ `cat "{}" |wc -w` -eq 0 ]; then echo "file - {}";fi' \; -or -empty -exec bash -c "echo dir - {}" \; 

用于列出空文件夹和文件,包括空格和空行

相关内容