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

时间:2010-07-01 11:38:08

标签: linux file find xargs delete-file

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

i=100
while [ $i -le 999 ];do
    rm -f file${i}*;
    let i++;
done

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

10 个答案:

答案 0 :(得分:112)

findxargs结合使用。

find . -name 'file*' -size 0 -print0 | xargs -0 rm

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

答案 1 :(得分:74)

使用GNU的find(请参阅注释),不需要使用xargs:

find -name 'file*' -size 0 -delete

答案 2 :(得分:6)

您可以使用以下命令:

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

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

答案 3 :(得分:4)

删除当前目录中名为file ...的所有文件:

find . -name file* -maxdepth 1 -exec rm {} \;

这仍然需要很长时间,因为它会为每个文件启动rm

答案 4 :(得分:4)

find . -maxdepth 1 -type f -size 0 -delete

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

列出文件而不删除它们:

find . -maxdepth 1 -type f -size 0

答案 5 :(得分:2)

你甚至可以使用删除文件的选项-delete。

从男人发现,  -删除               删除文件;如果删除成功,则为true。

答案 6 :(得分:1)

这是一个例子,自己尝试将有助于理解:

bash-2.05b$ touch empty1 empty2 empty3
bash-2.05b$ cat > fileWithData1
Data Here
bash-2.05b$ ls -l
total 0
-rw-rw-r--    1 user group           0 Jul  1 12:51 empty1
-rw-rw-r--    1 user group           0 Jul  1 12:51 empty2
-rw-rw-r--    1 user group           0 Jul  1 12:51 empty3
-rw-rw-r--    1 user group          10 Jul  1 12:51 fileWithData1
bash-2.05b$ find . -size 0 -exec rm {} \;
bash-2.05b$ ls -l
total 0
-rw-rw-r--    1 user group          10 Jul  1 12:51 fileWithData1

如果您查看find的手册页(类型man find),您将看到此命令的一系列强大选项。

答案 7 :(得分:1)

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

find /path/to/folder -size 0 -delete

答案 8 :(得分:0)

“...有时甚至不删除这些文件”让我觉得这可能是你经常做的事情。如果是这样,此Perl脚本将删除当前目录中的任何零字节常规文件。它通过使用系统调用(unlink)来完全避免rm,并且非常快。

#!/usr/bin/env perl
use warnings;
use strict;

my @files = glob "* .*";
for (@files) {
    next unless -e and -f;
    unlink if -z;
}

答案 9 :(得分:0)

在找出文件存在的原因的同时,提升它的价值。您只是通过删除它们来治疗症状。如果某个程序正在使用它们锁定资源怎么办?如果是这样,你删除它们可能会导致腐败。

lsof是一种可以找出哪些进程处理空文件的方法。