удаление всего файла определенного размера - PullRequest
5 голосов
/ 08 июня 2010

У меня есть куча файлов журналов, и я должен удалить файлы небольшого размера, которые были ошибочными и были созданы. (63 байта). Я должен копировать только те файлы, в которых есть данные.

Ответы [ 3 ]

18 голосов
/ 08 июня 2010

Shell (linux);

find . -type f -size 63c -delete

Пройдет подкаталоги (если вы не укажете иначе)

11 голосов
/ 08 июня 2010

Поскольку вы пометили свой вопрос как "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)
5 голосов
/ 08 июня 2010

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

Я использую потребность $File::Find::name в версии для поиска, поэтому вы получаете полный путь, версия без связи не нуждается, потому что File::Find меняет каталог на каждый целевой каталог и задает $_ в качестве имени файла (то есть, как -s и unlink получают имя файла). Вы также можете посмотреть grep и glob

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...