Linux/Unix:查找和删除所有空目录和文件

时间:2020-01-09 10:40:13  来源:igfitidea点击:

如何查找类似Linux/Apple OS X/BSD/Unix的操作系统上的所有空文件和目录,并一次性删除它们?

您需要结合使用find和rm命令。
GNU/find可以通过-delete选项删除文件。
请注意,Unix/Linux文件名可以包含空格和换行符,这种默认行为经常会出现问题。
包含rm命令的许多实用程序均会错误地处理包含空格和/或换行符的文件名。
为了避免出现问题,您需要传递-print0选项来查找命令,并将-0选项传递给xargs命令,以防止出现此类问题。

如何计算所有空文件或目录?

语法如下:

## count empty dirs only ##
find /path/ -empty -type d | wc -l
 
## count empty files only ##
find /path/ -empty -type f | wc -l

其中:

  • -empty:仅查找空文件,并确保它是常规文件或目录。
  • -type d:仅匹配目录。
  • -type f:仅匹配文件。
  • -delete:删除文件。始终在find命令的末尾放置-delete选项,因为find命令行被评估为表达式,因此,首先放置-delete将使find尝试删除指定起点以下的所有内容。

当您需要在单个命令中清理空目录和文件时,这很有用。

方法2:使用xargs和rm/rmdir命令查找和删除所有内容

使用xargs命令查找和删除所有空目录的语法如下:

## secure and fast version ###
find /path/to/dir/ -type d -empty -print0 | xargs -0 -I {} /bin/rmdir "{}"

或者

## secure but may be slow due to -exec  ##
find /path/to/dir -type d -empty -print0 -exec rmdir -v "{}" \;

删除所有空文件的语法如下:

## secure and fast version ###
find /path/to/dir/ -type f -empty -print0 | xargs -0 -I {} /bin/rm "{}"

或者

## secure but may be slow due to -exec  ##
find . -type f -empty -print0 -exec rm -v "{}" \;

请参见手册页xargs(1)