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

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

请注意 ,如果它还会告诉我文件是否显示为空但是没有(例如,如果文件中有空格或换行符或其他内容),那么它也会非常有用。 并且将区分真正的空文件和在输出中看起来为空的文件。

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 

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

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

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

(为空,或者文件AND grep不检测至少一个非空白字符)。 可能有更好的方法。

来自~/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 - {}" \; 

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