У меня есть приблизительно 1 000 000 изображений png для удаления из моего мусора. Я попробовал:
rm -rf /home/ahmed/.local/share/Trash/*
find . -name '*' | xargs rm -v
Я получил следующее
bash: /usr/bin/find: Argument list too long
ARG_MAX
запускается в процессе листинга / удаления.
Вы можете:
Пусть find
обрабатывает удаление, оно по своей природе обрабатывает ARG_MAX
:
find /home/ahmed/.local/share/Trash/ -type f -iname '*.png' -delete
Использовать for
построить, это медленно BTW:
for f in /home/ahmed/.local/share/Trash/*.[Pp][Nn][Gg]; do
[[ -f $f ]] && rm "$f"
done
Оболочка расширяет подстановочный знак *
для всех имен файлов, что превышает максимальную длину командной строки. Хотя в вашем втором примере это не может произойти, потому что звездочка в кавычках '*'
.
Чтобы удалить весь каталог, вы также можете удалить сам каталог
rm -rf /home/ahmed/.local/share/Trash
Обратите внимание на отсутствующий подстановочный знак в конце.
Другим подходом, позволяющим избежать ошибок такого рода с find
, может быть использование -type f
. Эта опция выбирает все обычные файлы, например
find . -type f | xargs rm -v
Хотя с 1 000 000 файлов я бы избежал опции -v
.