2010-07-06 2 views
1

ive выполнил эту команду, чтобы удалить malwarm из всех файлов моих веб-сайтов и сохранить резервную копию из каждого файла, но после того, как 1 монетный двор от выполнения получил ошибку /usr/local/bin/Perl: список параметров слишком долгоerror/usr/local/bin/perl: слишком длинный список аргументов

Может кто-нибудь предложить способ избежать этой ошибки, PS ива огромного монтирования файлов :)

perl -e "s/<script.*PaBUTyjaZYg.*script>//g;" -pi.save $(find /home/ -type f -name '*php*') 

ответ

12

Используйте команду xargs, которая считывает имена файлов из STDIN и прогонов команда, несколько раз передающая столько имен файлов, сколько может, для каждого вызова целевой команды

find /home/ -type f -name '*php*' -print0 | xargs -0 perl -e "s/<script.*PaBUTyjaZYg.*script>//g;" 

Аргумент print0 для поиска работает с аргументом -0 для xargs, чтобы гарантировать, что имена файлов завершаются нулевым символом. Это предотвращает появление имен файлов со встроенными пространствами.

+1

xargs имеет команду -n для управления количеством аргументов, которые он передает за вызов, что мне иногда нужно. – reinierpost

+0

Steve, perfect, thanks alot, еще один отзыв, пожалуйста, теперь мне нужно удалить все файлы, завершенные * .php.save – user172697

+0

xargs просто строит список команд для вас, поэтому вам просто нужно найти и передать его в xargs rm так что-то вроде этого 'find/home/-type f -name '* .php.save' -print0 | xargs -0 rm' –