У меня есть около 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.
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.
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.