- удалить старые папки по содержимому, Аноним, 11:46 , 10-Июн-20 (1)
если в каталоге есть и старые и новые файлы, то старые все равно надо сохранить и пропустить каталог?
- удалить старые папки по содержимому, Роман, 11:53 , 10-Июн-20 (2)
> если в каталоге есть и старые и новые файлы, то старые все > равно надо сохранить и пропустить каталог?да. в том то и дело
- удалить старые папки по содержимому, Аноним, 12:41 , 10-Июн-20 (3)
красивых вариантов не знаю, к сожалению если обновленных каталогов ожидается не слишком много, то можно попробовать такую наркоманию
find /mnt/backup/ -type d -maxdepth 5 -mindepth 5 | fgrep -v -f <(find /mnt/backup/ -type f -mtime -365 -maxdepth 5 -mindepth 5 -printf '%h\n' | sort -u)
- удалить старые папки по содержимому, Роман, 15:59 , 10-Июн-20 (5)
> красивых вариантов не знаю, к сожалению > если обновленных каталогов ожидается не слишком много, то можно попробовать такую наркоманию > find /mnt/backup/ -type d -maxdepth 5 -mindepth 5 | fgrep -v > -f <(find /mnt/backup/ -type f -mtime -365 -maxdepth 5 -mindepth 5 > -printf '%h\n' | sort -u) спасибо! лучше все равно я так понял не будет )))
- удалить старые папки по содержимому, Аноним, 16:50 , 10-Июн-20 (9)
только тут по идее не учитывается случай, когда каталог может содержать один старый файл и несколько обновляемых вложенных каталогов
- удалить старые папки по содержимому, Аноним, 15:55 , 10-Июн-20 (4)
find . -type d -links 2 | while read DIR ; do [ -z $(find "$DIR" -type f -mtime -365) ] && echo "$DIR" ; done ; Находит все директории без субдиректорий и печатает те, в которых файлы не менялись в последние 365 дней. Проверьте, должно работать.
- удалить старые папки по содержимому, Роман, 16:00 , 10-Июн-20 (6)
> find . -type d -links 2 | while read DIR ; do > [ -z $(find "$DIR" -type f -mtime -365) ] && echo > "$DIR" ; done ; > Находит все директории без субдиректорий и печатает те, в которых файлы не > менялись в последние 365 дней. Проверьте, должно работать.сейчас попробую
- удалить старые папки по содержимому, Аноним, 16:01 , 10-Июн-20 (7) +1
`find . -type d -links 2 | while read DIR ; do [ -z "$(find "$DIR" -type f -mtime -365)" ] && echo "$DIR" ; done ;`Вот окончательная работающая версия. Посвящается всем, кому лень прочитать тоненькую книжку по шелл скриптам. - удалить старые папки по содержимому, Роман, 16:03 , 10-Июн-20 (8)
> find . -type d -links 2 | while read DIR ; do > [ -z $(find "$DIR" -type f -mtime -365) ] && echo > "$DIR" ; done ; > Находит все директории без субдиректорий и печатает те, в которых файлы не > менялись в последние 365 дней. Проверьте, должно работать.а если есть субдериктории
- удалить старые папки по содержимому, Аноним, 17:04 , 10-Июн-20 (10)
>> find . -type d -links 2 | while read DIR ; do >> [ -z $(find "$DIR" -type f -mtime -365) ] && echo >> "$DIR" ; done ; >> Находит все директории без субдиректорий и печатает те, в которых файлы не >> менялись в последние 365 дней. Проверьте, должно работать. > а если есть субдериктории Да это в принципе не важно, просто для исключения прохода по одним и тем же файлам по много раз, если большая вложенность. Для нормальной работы нужно загружать в пайп только те директории, которые потенциально требуется удалить. Как этот список составить, сами думайте.
- удалить старые папки по содержимому, ACCA, 21:09 , 23-Июн-20 (11)
Разверни задачу.Найди каталоги, где есть новые файлы. Ты ищешь файлы, поэтому depth = 5+1: find -mtime -365 -maxdepth 6 -mindepth 6 -type f -print0 | xargs -0 dirname -z | sort -zu найди все каталоги. Ты ищешь каталоги, поэтому depth = 5: find -maxdepth 5 -mindepth 5 -type d -print0 | sort -zu Слей два списка в один и найди тех, кто упомянут только один раз:
sort -z <(find -mtime -365 -maxdepth 6 -mindepth 6 -type f -print0 | xargs -0 dirname -z | sort -zu) \ <(find -maxdepth 5 -mindepth 5 -type d -print0 | sort -zu) | uniq -zu Для отладки посмотри на эти каталоги: sort -z <(find -mtime -365 -maxdepth 6 -mindepth 6 -type f -print0 | xargs -0 dirname -z | sort -zu) \ <(find -maxdepth 5 -mindepth 5 -type d -print0 | sort -zu) | uniq -zu | xargs -0 -L 1 echo И удали их нах. sort -z <(find -mtime -365 -maxdepth 6 -mindepth 6 -type f -print0 | xargs -0 dirname -z | sort -zu) \ <(find -maxdepth 5 -mindepth 5 -type d -print0 | sort -zu) | uniq -zu | xargs -0 rm -rf Учти, что если у тебя нет новых файлов, то будут удалены вообще все каталоги.
|