假设我的文件夹中~/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 - {}" \;
用于列出空文件夹和文件,包括空格和空行