如何在linux中删除多个0字节文件?

sma*_*ket 56 linux file find xargs delete-file

我有一个包含许多0字节文件的目录.我使用ls命令时甚至看不到文件.我正在使用一个小脚本删除这些文件,但有时甚至不删除这些文件.这是脚本:

i=100
while [ $i -le 999 ];do
    rm -f file${i}*;
    let i++;
done
Run Code Online (Sandbox Code Playgroud)

有没有其他方法可以更快地完成这项工作?

Did*_*set 119

使用find结合xargs.

find . -name 'file*' -size 0 -print0 | xargs -0 rm
Run Code Online (Sandbox Code Playgroud)

你可以避免rm为每个文件启动.

  • 'xargs`为+1.比`-exec`好多了.考虑使用`-print0`和`-0`来保证安全. (12认同)
  • `-exec`将使用每个参数启动一个新进程.`xargs`不会.这是启动过程数量的巨大改进,并且执行时间大大改善.有关详细信息,请参阅`man xargs`. (7认同)
  • 这适用于 Ubuntu:`find 。-type f -name '*' -size 0 -print0 | xargs -r0 rm` (3认同)
  • 您要使用-size 0c。-size 0将包括小于512字节的文件。 (2认同)
  • @tumtumtum的确,`-size 0c`会更正确(没有指定默认单位为块数),但是您错误地指出`-size 0'将包括小于512字节的文件。实际上,文件大小为1字节后,便会占用1个块。 (2认同)

cor*_*ump 77

使用GNU find(参见注释),不需要使用xargs:

find -name 'file*' -size 0 -delete
Run Code Online (Sandbox Code Playgroud)

  • 请注意,如果不按名称过滤,显然您不需要`-name'文件*'`部分. (7认同)
  • 只在GNU中找到.POSIX不指定-delete和-ls之类的操作 (5认同)
  • @alper`find`接受一个目录作为它的第一个参数,即`find/home/user/-name"file*..."`.**强烈推荐:首先使用`-print`而不是`-delete`,然后只有当结果令人满意时,删除文件**. (4认同)
  • 很好 - 我没有意识到发现有删除操作. (3认同)
  • 要制作Skippys注释的复制和粘贴解决方案,只需使用`find.-size 0 -delete` (3认同)

小智 9

如果要查找并删除文件夹中的所有 0 字节文件:

find /path/to/folder -size 0 -delete
Run Code Online (Sandbox Code Playgroud)


jit*_*dra 6

您可以使用以下命令:

找 .-maxdepth 1 -size 0c -exec rm {} \;

如果要删除子目录中的0字节文件,请-maxdepth 1在上一个命令中省略并执行.


小智 6

find . -maxdepth 1 -type f -size 0 -delete
Run Code Online (Sandbox Code Playgroud)

这将在当前目录中查找大小为 0 的文件,而不进入子目录,并删除它们。

要列出文件而不删除它们:

find . -maxdepth 1 -type f -size 0
Run Code Online (Sandbox Code Playgroud)