PDA

Показать полную графическую версию : Найти и удалить


pi-a-ner
09-09-2005, 09:15
Задача: в определённом каталоге удалить все файлы содержащие текст "qwerty". Пока что у меня заработало только так
rm -f `grep qwerty -l ./my_path/*`
Но я-то знаю, то это не совсем корректно. Скажем, если файлов слишком много нужно использовать xargs. А вот с find -exec у меня ничего не выходит. Покажите примерчик, plz, а дальше я сам разберусь.

SMV
10-09-2005, 21:42
#!/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
10-09-2005, 22:15
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
10-09-2005, 22:33
SMV
Спасибо, на перле я и сам лёгкостью могу это решить. А вот без перла...
mar
Вы, видимо, не совсем поняли: "qwerty" должно быть не в названии, а в содержимом файла.

mar
10-09-2005, 23:21
Пардон, торможу :(
Забавно:
find ../test -type f -print | xargs grep qwerty
отрабатывает правильно, а с -delete сносит все :/ Надо подумать

pi-a-ner
11-09-2005, 10:02
mar
Хм, казалось, с find я уже все варианты перепробовал, а вот так у меня получилось:
find ../test -type f -print | xargs grep -ls qwerty| xargs rm -f
Спасибо.

mar
11-09-2005, 11:33
pi-a-ner
работает :) И впрямь я вчера сильно тормозила, пардон




© OSzone.net 2001-2012