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


18

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

请注意,如果它还能告诉我文件是否为空但不是(例如,文件中是否包含空格或换行符),它也将非常有用。并且可以区分真正的空文件和在输出中看起来只是空的文件。


1
一个空文件,是没有字符的文件吗?(可以是空格,换行符和制表符)吗?
Jacob Vlijm '16

@JacobVlijm:嗯,以前我只是想考虑0字节的文件,但是现在您提到它,可能有人疯狂地给我一个带有空格或换行符或其他内容的文件,所以我也想检测到这些,但我希望输出区分实际的空文件和看起来只是空的文件。

Answers:


25

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 {} \;

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

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

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


抱歉,我错过了一些内容,请查看问题的编辑版本。它不应添加太多。

11

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

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


并且这会递归地列出子文件夹及其内容吗?

这将递归显示空文件和文件夹
EdiD '16

抱歉,我错过了一些内容,请查看问题的编辑版本。它不应添加太多。

[ `grep -c [[:alnum:]] "{}"` -eq 0 ]将只允许文件中不包含字符的文件通过[A-Za-z0-9]
kos

@kos-也许用图形代替alnum可以完成工作
EdiD
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.