Удалить подкаталоги с YYYYMMDD с именем старше N дней

У меня есть каталог, где создаются суточные подкаталоги, буквально названные в соответствии с $date . Как удалить папки и их содержимое старше 7 дней в соответствии с YYYYMMDD в имени файла, а не в дате метаданных? Скажем, у меня (пропущены некоторые для краткости):

 20170817 20170823 20170828 20170901 

Я получаю следующие папки (которые они должны соблюдать):

 20170828 20170901 

Я создал переменную, содержащую дату 7 дней назад: dt_prev=$(date -d "`date`-7days" +%Y%m%d)

Я думал, что ls -l список этих имен папок и сравнивается по строкам, но это включает очистку этого списка и т. Д., И я считаю, что должен быть более простой способ.

4 Solutions collect form web for “Удалить подкаталоги с YYYYMMDD с именем старше N дней”

Я думаю, что решение было бы более простой версией того, что опубликовал glenn jackman , например

 seven_days=$(date -d "7 days ago" +%Y%m%d) for f in [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]; do [ -d "$f" ] || continue (( $f < $seven_days )) && echo rm -r "$f" done 

Удалите echo если результаты будут выглядеть правильно.

Тест -d гарантирует, что мы только проверяем (удаляем) каталоги.

Вы не должны разбирать ls , вместо этого вы можете сделать что-то вроде этого:

 for f in *; do test "$f" -lt "$date" && do something; done 

Например, для следующих каталогов и date=20170825 :

 $ ls 20170817 20170823 20170828 20170901 $ for f in *; do test "$f" -lt "$date" && echo "$f"; done 20170817 20170823 

С помощью команды find :

 date_week_ago=$(date -d "7 days ago" +%Y%m%d) find . -type d -regextype posix-extended -regex '.*/[0-9]{8}$' \ -exec bash -c 'd=$(basename {}); (( '$date_week_ago' > $d )) && rm -rf "$d"' \; 

Просто используйте команду find .

 find . -type d ! \( -name "$(date -d "-7 days" +%Y%m%d)" \ $(eval printf "%s" "\" -o -name \ \$(date -d -"{6..0}"days +%Y%m%d)\"") -o -name . \) -exec rm -rf -- '{}' + 
  • Только d iretories -type -type d
  • Только директора, где их имя старше 7 дней старения.
  • Удалите этот каталог и его содержимое rm -rf -- '{}' сразу +
  • Продолжить загрузку, если временная метка не изменилась
  • Можно ли использовать команду at для планирования задания, которое должно выполняться с заданной меткой времени?
  • Как мне выполнить ls, а затем отсортировать результаты по дате?
  • Использовать awk для печати и редактирования даты
  • Как отрегулировать временную метку Exif фотографии, используя дату в названии
  • Удалить файлы, более новые, чем X день и час
  • Что вы можете сделать с файлом без запуска отметки «Изменить»?
  • Что означает отметка времени «00:00:00» в kern.log?
  • Как использовать awk для чтения данных между всеми частыми временными интервалами
  • Как найти дату создания файла?
  • Почему debugfs не показывает crtime в наносекундах?
  • Interesting Posts

    Есть ли недостаток, позволяющий пересылать X11 в ssh?

    Manjaro: изменить текстовый редактор по умолчанию на Sublime Text 3

    Смутно о строфе конфигурации PAM и ролях параметров флага управления

    Как я могу решить: нет такого файла или каталога?

    Как постоянно включить scl CentOS 6.4?

    Текстовый редактор Geany – курсор или курсор

    сопоставление шаблонов без эха

    Делайте работу «читать», когда не фокусируетесь на терминале

    Сложность установки и компиляции Dada Engine на OSX

    Как подсчитать вхождения всех слов во всех файлах каталога с помощью grep? Но с подсчетом, увеличенным только один раз за слово на файл

    Как установить mintinstall для запроса пароля суперпользователя из учетной записи non sudoer?

    Как победить GRUB2 в подчинении?

    Использовать клавиши PGUP / HOME и PGDN / END для инвертирования fn

    Просмотр имен хостов в сети

    Удаление сообщений из очереди qmail без остановки qmail

    Linux и Unix - лучшая ОС в мире.