Удаление большого числа файлов в linux

Иногда при попытке удалить файлы сессий sess_, *.tmp или *.cache rm валится с сообщением о слишком большом количестве файлов:

bash: /bin/rm: Argument list too long

Чтобы избежать появления ошибки, проще всего использовать find:

# find /var/www/username/data/www/ -name "*.cache" -delete

Многие рекомендуют использовать xargs, вот таким образом:

# find /var/www/user/data/www/ -name "*.cache" | xargs rm

Однако, при действительно большом количестве файлов xargs сам сообщает об ошибке:
xargs: unmatched single quote; by default quotes are special to xargs unless you use the -0 option

Если вам так нравится xargs (многие пытливые умы с просторов интернет сообщают, что он в связке с rm работает быстрее), то можно использовать его с аргументом -0 opinon, чуть изменив синтаксис, например:

# find /tmp -name "sess*" -print0 | xargs -0 /bin/rm

Комментарии 1

  • Как-то подозрительно на мою статью похоже, но да ладно.
    На самом деле ничего не поможет пока вы не избавитесь от регулярки. при регулярном выражение вначале идет построение всего массива и только посел того выборка, даже в xargs
    Вам нужно перенаправить поток скажем в файл, потом уже считывать построчно.
    Только так можно удалить сотню милионов файлов.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *