Ответы:
Это можно сделать с помощью find
:
find . -type f -size -1M -exec rm {} +
Обратите внимание, что это рекурсивно сойдет в подкаталоги и безоговорочно удалит все файлы размером менее 1 мегабайта. Быть осторожен.
find
. :)
find
ограничивает количество аргументов для вызываемого процесса, чтобы вписаться в ограничения системы, в отличие от того rm *
, который гарантированно является одним вызовом процесса. при необходимости find
вызовет несколько экземпляров rm
. И я уверен, что специальные символы обрабатываются правильно, включая символы новой строки. Я предпочитаю -exec rm
более -delete
из соображений гибкости - в качестве примера, последний не предлагает способа удаления файлов, защищенных от записи.
-1M
означает менее одного мегабайта по желанию. Ваша версия удалит все файлы размером ровно в один мегабайт, что выглядит несколько бессмысленной операцией.
find . -type f -size +1M -exec rm {} +
. Обратите внимание на + 1M вместо -1M.
Это должно сделать работу:
$ find <directory> -type f -size -1M -delete
-
знак минус, означающий «менее 1 млн». Если вы запустите, find <directory> -type f -size +1M -delete
вы удалите все файлы размером более 1M.
Просто для разнообразия и возможного (возможно, предельного) прироста производительности:
find <directory> -type f -size -1M -print0 | xargs -0 rm
xargs
процесс.
Вы можете проверить эту ссылку http://ayaz.wordpress.com/2008/02/05/bash-quickly-deleting-empty-files-in-a-directory/ , она имеет именно то, что вы хотите.
for file in *;
do
file_size=$(du $file | awk '{print $1}');
if [ $file_size == 0 ]; then
echo "Deleting empty file $file with file size $file_size!";
echo "rm -f $file";
fi;
done
Вы можете перебрать все файлы с помощью цикла for, а затем использовать du и awk, чтобы найти размер файла, как в приведенном выше примере.
1M
.