Войти

Показать полную графическую версию : [решено] отфильтровать файлы а затем удалить.


Trinux
17-06-2013, 11:40
Здравствуйте, помогите решить задачу. Есть сервер на дебиане + почта нужно сделать так чтобы письма с конкретной темой самоуничтожались. К примеру:


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
А если так?

rm `grep -rl 'REMOVE' *`

Trinux
17-06-2013, 16:27
очень даже! только чтобы вопросов не задавал rm -f


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

shisik
18-06-2013, 07:17
В смысле? Вообще все в определённой папке? Тогда

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

Trinux
18-06-2013, 10:12
нет, ко всему каталогу /home/vmail/ естественно, что в нем много других каталогов и подкаталогов, которые тоже нужно просматривать.

shisik
18-06-2013, 10:16
Ну для этого параметр -R и стоит.

Trinux
18-06-2013, 10:23
не совсем понимаю вид всей команды.


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

shisik
18-06-2013, 10:28
Так нужно посмотреть или удалить?

Trinux
18-06-2013, 10:33
удалить во всех каталогах /home/vmail/


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

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

vadblm
18-06-2013, 10:44
Ещё вариант:
rm `find . -type f -print | xargs grep -l 'REMOVE'`

Trinux
18-06-2013, 11:00
Всё разобрался. спасибо за помощь!

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




© OSzone.net 2001-2012