Відповіді:
Це можна зробити за допомогою 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 {} +. Зверніть увагу на + 1М замість -1М.
Це має зробити цю роботу:
$ find <directory> -type f -size -1M -delete
-знак є знаком мінус, що означає "менше 1М". Якщо ви запустите, find <directory> -type f -size +1M -deleteви видалите всі файли розміром більше 1М.
Просто для різноманітності та можливого (можливо, граничного) підвищення продуктивності:
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.