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

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

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

  2. find . -name '*' | xargs rm -v

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

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

2 ответа

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
ответ дан 3 December 2019 в 06:38

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


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

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

Обратите внимание на отсутствующий подстановочный знак в конце.


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

find . -type f | xargs rm -v

Хотя с 1 000 000 файлов я бы избежал опции -v.

1
ответ дан 3 December 2019 в 06:38

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

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