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

25 command-line scripts files search directory

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

请注意,如果它还可以告诉我文件是否为空但实际上不是(例如,其中是否有空格或换行符或其他内容),它也会非常有用。并且会区分一个真正的空文件和一个在输出中看起来是空的文件。

ste*_*ver 37

man find

    -empty File is empty and is either a regular file or a directory.
Run Code Online (Sandbox Code Playgroud)

所以要找到空文件和目录就足够了

find ~/lists -empty
Run Code Online (Sandbox Code Playgroud)

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

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

例如

find ~/lists -empty -printf '%y %p\n'
Run Code Online (Sandbox Code Playgroud)

或使用外部程序,例如ls,其中包括一个--classify选项

    -F, --classify
          append indicator (one of */=>@|) to entries
Run Code Online (Sandbox Code Playgroud)

IE

find ~/lists -empty -exec ls -Fd {} \;
Run Code Online (Sandbox Code Playgroud)

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

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

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


Edi*_*diD 15

~/list文件夹:

find . -empty -type d
Run Code Online (Sandbox Code Playgroud)

用于列出空目录和

find . -empty -type f
Run Code Online (Sandbox Code Playgroud)

用于列出空文件。

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

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