Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Общий по Linux (http://forum.oszone.net/forumdisplay.php?f=9)
-   -   [решено] отфильтровать файлы а затем удалить. (http://forum.oszone.net/showthread.php?t=262620)

Trinux 17-06-2013 11:40 2169030

отфильтровать файлы а затем удалить.
 
Здравствуйте, помогите решить задачу. Есть сервер на дебиане + почта нужно сделать так чтобы письма с конкретной темой самоуничтожались. К примеру:


root@msb:/home/vmail/pl.ua/m-gol/new# cat /home/vmail/pl.ua/m-gol/new/* | grep 'REMOVE'
Subject: REMOVE

файлы типа

-rw------- 1 vmail vmail 699 2013-06-17 10:04 1371452689.P2695Q0M10324.msb.pl.ua
-rw------- 1 vmail vmail 702 2013-06-17 10:28 1371454131.P6236Q0M829677.msb.pl.ua



Т.е. в директории есть письма с темой удалить. Как выполнять это для всех файлов и подкаталогов в /home/vmail/ , и после обнаружения файлы удалять. ?

shisik 17-06-2013 15:43 2169207

А если так?

Код:

rm `grep -rl 'REMOVE' *`

Trinux 17-06-2013 16:27 2169226

очень даже! только чтобы вопросов не задавал rm -f


А как попросить просмотреть все каталоги и файлы в них?

shisik 18-06-2013 07:17 2169597

В смысле? Вообще все в определённой папке? Тогда

Код:

ls -lR путь_к_папке

Trinux 18-06-2013 10:12 2169686

нет, ко всему каталогу /home/vmail/ естественно, что в нем много других каталогов и подкаталогов, которые тоже нужно просматривать.

shisik 18-06-2013 10:16 2169690

Ну для этого параметр -R и стоит.

Trinux 18-06-2013 10:23 2169694

не совсем понимаю вид всей команды.


ls -lR /home/vmail/ | rm `grep -rl 'REMOVE' *` ??

shisik 18-06-2013 10:28 2169699

Так нужно посмотреть или удалить?

Trinux 18-06-2013 10:33 2169703

удалить во всех каталогах /home/vmail/


я пробовал рекурсивно, -r но оно удаляет вместе с каталогом)))

shisik 18-06-2013 10:35 2169706

Ну а первая команда чем не устраивает? Параметр -r у grep как раз и включает рекурсивный поиск. И rm удаляет все файлы во всех подкаталогах, которые найдёт grep.

vadblm 18-06-2013 10:44 2169713

Ещё вариант:
rm `find . -type f -print | xargs grep -l 'REMOVE'`

Trinux 18-06-2013 11:00 2169723

Всё разобрался. спасибо за помощь!

vadblm 27-06-2013 18:13 2175382

И ещё один вариант, имхо самый правильный:
find . -type f -exec grep -q 'REMOVE' '{}' \; -delete


Время: 09:38.

Время: 09:38.
© OSzone.net 2001-