Удалить подкаталоги с 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 -- '{}' сразу +
  • Сохранять измененную метку времени после редактирования
  • Как изменить время BIRTH файла BSD (aka btime)?
  • Заменить символ алфавитом в зависимости от позиции в строке
  • Извлечь временную метку из файла gzip
  • Команда одиночной строки для протоколирования IP-адресов
  • Почему «touch -a» также устанавливает ctime?
  • Bash: сортировка элементов массива по дате файла
  • Получение файлов для текущей даты в Linux?
  • Как добавить / добавить временную метку для вывода grep?
  • Добавление метки времени в файл журнала с помощью команды cronjob
  • Получить дату изменения, которую можно использовать с touch -m
  • Linux и Unix - лучшая ОС в мире.