删除所有特定大小的文件

时间:2010-06-08 00:10:03

标签: python perl shell

我有一堆日志文件,我必须删除一些小尺寸的文件,这些文件是创建的错误文件。 (63字节)。 我只需要复制那些包含数据的文件。

3 个答案:

答案 0 :(得分:18)

Shell(linux);

find . -type f -size 63c -delete

将遍历子目录(除非你另有说明)

答案 1 :(得分:11)

由于您使用“python”标记了您的问题,因此您可以使用该语言执行此操作:

target_size = 63
import os
for dirpath, dirs, files in os.walk('.'):
    for file in files: 
        path = os.path.join(dirpath, file)
        if os.stat(path).st_size == target_size:
            os.remove(path)

答案 2 :(得分:5)

Perl one liner是

perl -e 'unlink grep {-s == 63} glob "*"'

虽然,在运行它之前测试它会做什么总是一个好主意:

perl -le 'print for grep {-s == 63} glob "*"'

如果您想要遍历整个目录树,则需要使用不同的版本:

#find all files in the current hierarchy that are 63 bytes long.
perl -MFile::Find=find -le 'find sub {print $File::Find::name if -s == 63}, "."'

#delete all files in the current hierarchy that 63 bytes long
perl -MFile::Find=find -e 'find sub {unlink if -s == 63}, "."'

我在查找版本中使用了需要$File::Find::name,因此您获得了整个路径,取消链接版本不需要它,因为File::Find将目录更改为每个目标目录并设置{{3} }是文件名($_-s获取文件名的方式)。您可能还想查找unlinkgrep