Иногда при попытке удалить файлы сессий 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
Как-то подозрительно на мою статью похоже, но да ладно.
На самом деле ничего не поможет пока вы не избавитесь от регулярки. при регулярном выражение вначале идет построение всего массива и только посел того выборка, даже в xargs
Вам нужно перенаправить поток скажем в файл, потом уже считывать построчно.
Только так можно удалить сотню милионов файлов.