Python 删除所有特定大小的文件

Python 删除所有特定大小的文件,python,perl,shell,Python,Perl,Shell,我有一堆日志文件,我必须删除一些小文件,它们是创建的错误文件。(63字节)。 我必须只复制那些包含数据的文件。Shell(linux) 将遍历子目录(除非您另有说明)因为您用“python”标记了您的问题,下面是如何使用该语言执行此操作的: target_size = 63 import os for dirpath, dirs, files in os.walk('.'): for file in files: path = os.path.join(dirpath,

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

Shell(linux)


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

因为您用“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)
Perl一行程序是

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}, "."'

我在查找版本中使用了need,因此您可以获得整个路径,而取消链接的版本不需要它,因为它会将目录更改为每个目标目录,并将其设置为文件名(即如何获取文件名)。您可能还需要查找,并且

~unutbu可以添加目录,但不需要(默认为工作目录)尽管最好能说明可以给出的多个路径:
find./foo/bar./foz.././baz-type f
将同时搜索所有3个目录。@Wrikken:find的并非所有版本默认为当前目录。最好显式指定目录,以避免以后命令意外失败。啊?我可以问哪个版本/平台没有?不是说显式有什么不对,特别是在删除时,只是好奇而已。@Wrikken:GNU-find是我所知道的唯一一个默认为“.”的;BSD派生版本往往需要path参数。我手头碰巧有一台OSF/1机器,它还需要一个path参数。
#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}, "."'