у меня есть набор файлов журнала, и я должен удалить файлы некоторых небольших размеров, которые были ошибочными файлами, которые были созданы. (63 байта). Я должен скопировать только те файлы, которые имеют данные в нем.
Shell (linux);
find . -type f -size 63c -delete
Будет перемещаться по подкаталогам (если вы не укажете иное)
В 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
Поскольку вы отметили свой вопрос словом «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)