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)
用于列出空文件夹和文件,包括空格和空行