Список аргументов слишком длинный при удалении файлов в корзине

У меня есть около 1 000 000 изображений PNG для удаления из моего мусора. Я попытался:

rm -rf /home/ahmed/.local/share/Trash/* find . -name '*' | xargs rm -v

Я получил следующее

bash: /usr/bin/find: Argument list too long
1
задан 9 May 2017 в 03:24

6 ответов

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
4
ответ дан 18 July 2018 в 15:07

Оболочка расширяет подстановочный знак * ко всем именам файлов, которые переполняют максимальную длину командной строки. Хотя во втором примере этого не может быть, потому что звездочка находится в кавычках '*'.

Чтобы удалить весь каталог, вы также можете удалить сам каталог

rm -rf /home/ahmed/.local/share/Trash

Обратите внимание на отсутствующий шаблон в конце.

Другим способом избежать такого рода ошибок с помощью find может быть использование -type f. Эта опция выбирает все обычные файлы, например

find . -type f | xargs rm -v

Если у вас 1 000 000 файлов, я бы избегал выбора -v.

1
ответ дан 18 July 2018 в 15:07

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
4
ответ дан 24 July 2018 в 20:33

Оболочка расширяет подстановочный знак * ко всем именам файлов, которые переполняют максимальную длину командной строки. Хотя во втором примере этого не может быть, потому что звездочка находится в кавычках '*'.

Чтобы удалить весь каталог, вы также можете удалить сам каталог

rm -rf /home/ahmed/.local/share/Trash

Обратите внимание на отсутствующий шаблон в конце.

Другим способом избежать такого рода ошибок с помощью find может быть использование -type f. Эта опция выбирает все обычные файлы, например

find . -type f | xargs rm -v

Если у вас 1 000 000 файлов, я бы избегал выбора -v.

1
ответ дан 24 July 2018 в 20:33

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
4
ответ дан 31 July 2018 в 23:35

Оболочка расширяет подстановочный знак * ко всем именам файлов, которые переполняют максимальную длину командной строки. Хотя во втором примере этого не может быть, потому что звездочка находится в кавычках '*'.

Чтобы удалить весь каталог, вы также можете удалить сам каталог

rm -rf /home/ahmed/.local/share/Trash

Обратите внимание на отсутствующий шаблон в конце.

Другим способом избежать такого рода ошибок с помощью find может быть использование -type f. Эта опция выбирает все обычные файлы, например

find . -type f | xargs rm -v

Если у вас 1 000 000 файлов, я бы избегал выбора -v.

1
ответ дан 31 July 2018 в 23:35

Другие вопросы по тегам:

Похожие вопросы: