2013-09-09 3 views
0

Я получил сценарий, который находит файлы в папках старше 30 дней:Попытка удалить файл и его родительские каталоги

find /my/path/*/README.txt -mtime +30 

, который будет затем получить результат, такие как

/my/path/jobs1/README.txt 
/my/path/job2/README.txt 
/my/path/job3/README.txt 

Теперь часть, на которую я застрял, - это удалить папку + файлы старше 30 дней.

find /my/path/*/README.txt -mtime +30 -exec rm -r {} \; 

, похоже, не работает. Это только удалив файл readme.txt

так в идеале я хотел бы просто удалить/job1,/job2,/job3 и любые вложенные файлы

Может кто-нибудь мне точку в правильном направлении?

+1

вы хотите удалить все файлы в папке, которая содержит файл старше, чем 30 дней, или только файлы, которые старше, чем за 30 дней (выезд в каталог, если он все еще содержит новые файлы) делать? – chepner

+0

можно было бы найти: найти ... -depth -print и сначала удалить (rm) файлы старше 30 дней в/my/path /, а затем сделать это снова, чтобы удалить (rmdir) оставшийся/my/path/.../каталогов/старше 30 дней ... (-depth, начиная с «leafs» в дереве каталогов), но, удалив в нем файл, теперь они уже несколько секунд ^^. Поэтому вам нужно будет выполнить скрипт в несколько этапов, я думаю, –

ответ

1

Это было бы более безопасным способом:

find /my/path/ -mindepth 2 -maxdepth 2 -type f -name 'README.txt' -mtime +30 -printf '%h\n' | xargs echo rm -r 

Удалить echo, если вы обнаружите, что уже правильно после просмотра выход.

С этим вы используете printf '%h\n', чтобы получить каталог файла, а затем используйте xargs для его обработки.

+0

Это приведет к удалению каталога, содержащего этот файл, даже если этот каталог (и поддиры) содержит другие файлы более поздние или более старые ... Это может быть довольно опасно, в зависимости от on/my/path /. –

+0

Фантастический! Спасибо! – user1910748

0

Вы можете просто запустить следующую команду, чтобы рекурсивно удалить каталоги, измененные более 30 дней назад.

find /my/path/ -type d -mtime +30 -exec rm -rf {} \; 
+0

... и, вероятно, уничтожить очень важные каталоги в процессе ^^ НЕ пытайтесь в "/", так как любые каталоги без изменений (т. Е. Без файлов, добавленных/удаленных/измененных в нем) будут удалены, включая любые его поддиреев и файлов. Например, есть хороший шанс, что/lib может быть старше 30 дней ... –

+0

Кто сказал что-нибудь о запуске его в «/»? – Fraser11

+0

никто, и особенно не вы, я знаю. Но я волнуюсь, что кто-то читает, не зная всех последствий, может попробовать это на чувствительных дорожках. Это было просто предупреждение для них. –

Смежные вопросы