Удаление каталога и его содержимого в формате% Y_% b_% d

Я создал скрипт, который должен удалять каталоги и их содержимое старше 2 дней. Сценарий работает нормально, но каталог не удаляется. Пожалуйста, помогите, это будет высоко ценится.

Подробности скрипта:

export BACKUP_SETS=/backupset/ if [ ! -d "$BACKUP_SETS" ]; then # Control will enter here if $DIRECTORY doesn't exist. printf "\nFailure when removing BACKUP_SETS, Exiting \n" exit 1 else two_days=$(date -d "2 days ago" +%Y_%b_%d) for f in $BACKUP_SETS[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]; do [ -d "$f" ] || continue (( $f < $two_days )) && echo rm -r "$f" done printf "\n BACKUP_SETS was removed successfully.\n" fi 

Каталог содержит папку, как указано ниже.

 [oracle@ backupset]$ ls -lrt total 12 drwxr-xr-x 2 oracle dba 12288 Jul 23 18:32 2018_Aug_23 

Вывод скрипта:

 [oracle@ backupset]$ ./backupset.sh BACKUP_SETS was removed successfully. 

3 Solutions collect form web for “Удаление каталога и его содержимого в формате% Y_% b_% d”

Ваш $BACKUP_SETS[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] не соответствует имени вашего каталога 2018_Aug_23 .

20180823 этого вы должны назвать свой каталог 20180823 , тогда он будет виден вашему сценарию. Кроме того, названные месяцы не сравниваются правильно ( Apr < Mar ).

Чтобы сделать имя каталога более читабельным, вы можете назвать свои каталоги, например, 2018-08-23 и использовать подстановочный знак $BACKUP_SETS[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] .

Как упоминалось в комментарии, вы не можете использовать < для сравнения названий месяцев:

 (( '2018-Aug-29' < '2018-Feb-28' )) && echo 'Uh oh, August is before February' || echo 'Sanity prevails' Uh oh, August is before February 

Если вы хотите сравнить строки даты лексически, я бы предложил вам использовать формат ГГГГ-ММ-ДД.

Хотя лучше использовать find для удаления старых каталогов независимо от соглашения об именах:

 find "$BACKUP_SETS" -mindepth 1 -maxdepth 1 -type d -mtime +2 -print -exec echo rm -rf {} \; 

Само собой разумеется, удалите echo когда вы хотите, чтобы он работал по-настоящему.

 find "$BACKUP_SETS" -type f -mtime +2 -exec rm {} \; find "$BACKUP_SETS" -type d -mindepth 1 -mtime +2 -exec rmdir {} \; 

Каталоги будут удалены на пару дней позже, чем их последний файл.

  • Переменная bash с кавычками и процентами
  • Bash: Как сохранить конкретную строку вывода CLI в файл?
  • Есть ли разница между запуском программы в качестве демона и использованием nohup с & для запуска программы?
  • Выход Awk для чтения в разделе
  • Перечисление переменных оболочки с фиксированным префиксом
  • Shell_exec динамически созданного скрипта с else
  • ls -d * / работает в некоторых папках, а не в других
  • Создание пользователем собственного «root»
  • Как удалить или получить доступ к файлу с обратной косой чертой \ в его имени?
  • Какое распределение вероятностей моделирует это состояние гонки?
  • понимание терминологии .sh файлов и cmake
  • Interesting Posts

    Лига легенд на Linux Mint 18 Cinnamon

    Получение «zsh: command not found: time» при запуске `time` в подселле

    0 байтов пространства подкачки, рекомендуется 10gb

    Как я могу постоянно видеть текущее имя файла в vim?

    Как проверить, существует ли приложение в $ PATH?

    Восстановление sendmail на сервере приложений FreeBSD после добавления нового контроллера домена activedirectory в сеть

    mv на шаблоне glob не работает без sudo

    Печать значений из одного столбца в другой между двумя файлами на основе шаблонов в каждой строке

    Как разрешить пользователям монтировать общие ресурсы Windows

    Предупреждения Vim через несколько секунд, когда не произошло никакого события

    zsh: установить TERM = screen-256color в tmux, но xterm-256color без tmux

    Настройки автоматического ответа модема Huawei

    Черный экран при загрузке ArchLinux с USB-накопителя на Chromebook R11

    Шлюз не меняется после перезапуска

    Как запустить скрипт при изменении IP-адреса

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