Найти и удалить

Ответить
Аватара пользователя
pi-a-ner

Найти и удалить

Сообщение pi-a-ner »

Задача: в определённом каталоге удалить все файлы содержащие текст "qwerty". Пока что у меня заработало только так



Код:

Код: Выделить всё

rm -f `grep qwerty -l ./my_path/*`

Но я-то знаю, то это не совсем корректно. Скажем, если файлов слишком много нужно использовать xargs. А вот с find -exec у меня ничего не выходит. Покажите примерчик, plz, а дальше я сам разберусь.
Аватара пользователя
SMV

Re: Найти и удалить

Сообщение SMV »

Код:

Код: Выделить всё

 #!/usr/bin/perl -w
 my $str=$ARGV[0];
 my $path=$ARGV[1];
 my @grep_out=`grep $str $path/*`;
 my ($file,$s);
 foreach $file (@grep_out){
     ($file,$s) = split(':', $file); 
     print "rm $file...\n";
     unlink $file;
 }

Можно, например, так.
Аватара пользователя
mar

Re: Найти и удалить

Сообщение mar »

man find

/delete



Код:

Код: Выделить всё

 -delete
             Delete found files and/or directories.  Always returns true.
             This executes from the current working directory as find recurses
             down the tree.  It will not attempt to delete a filename with a
             ``/'' character in its pathname relative to ``.'' for security
             reasons.  Depth-first traversal processing is implied by this
             option.

э-э-э вообще-то я всегда боюсь так чохом, но если уж очень хочется, то что-то такое:



Код:

Код: Выделить всё

find my_path/ -name "qwerty*" -delete

или, только файлы:



Код:

Код: Выделить всё

find my_path/ -name "qwerty*" -type f -delete
Аватара пользователя
pi-a-ner

Re: Найти и удалить

Сообщение pi-a-ner »

SMV

Спасибо, на перле я и сам лёгкостью могу это решить. А вот без перла...

mar

Вы, видимо, не совсем поняли: "qwerty" должно быть не в названии, а в содержимом файла.
Аватара пользователя
mar

Re: Найти и удалить

Сообщение mar »

Пардон, торможу Изображение

Забавно:



Код:

Код: Выделить всё

find ../test -type f -print | xargs grep qwerty

отрабатывает правильно, а с -delete сносит все :/ Надо подумать
Аватара пользователя
pi-a-ner

Re: Найти и удалить

Сообщение pi-a-ner »

mar

Хм, казалось, с find я уже все варианты перепробовал, а вот так у меня получилось:



Код:

Код: Выделить всё

find ../test -type f -print | xargs grep -ls qwerty| xargs rm -f

Спасибо.
Аватара пользователя
mar

Re: Найти и удалить

Сообщение mar »

pi-a-ner

работает Изображение И впрямь я вчера сильно тормозила, пардон
Ответить

Вернуться в «Общий по Linux»