Удаление каталога и его содержимого в формате% 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 {} \; 

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

  • Маршрутизация трафика на мои маршруты ipv4, кроме адреса 0.0.0.0?
  • bash test - сопоставить слэши
  • Получение доступа к переменной внутри предложения sudo в скрипте с EOF
  • Linux и Unix - лучшая ОС в мире.