Как найти каталоги старше даты, когда дата закодирована в dirname как yyyy-mm-dd

Я хочу очистить старые папки со всем содержимым с помощью GNU find. Я знаком с -mtime но временная метка каталогов обычно искажается rsync - не важно. К счастью, отметка времени кодируется в имя каталога как yyyy-mm-dd,

Как я могу сделать то же самое, используя dirname вместо метки времени? Оптимальное решение для чтения является предпочтительным.

РЕДАКТИРОВАТЬ: поврежденные метки времени:

drwxr-xr-x 2 user user 8192 Aug 23 11:12 2016-05-03
drwxr-xr-x 2 user user 8192 Aug 23 11:12 2016-05-04
drwxr-xr-x 2 user user 8192 Aug 23 11:12 2016-05-05

Файлы внутри папок имеют правильные метки времени.

  1. идея: очистить файлы с find -mtime а затем (второй раунд) очистить пустые папки. Скорее всего, невозможно выполнить оба в одном раунде, так как -empty будет применяться к файлам, а также.

  2. Идея: исправить метки времени каталогов в один раунд (в соответствии с их именем), а затем очистить все find -mtime в другом раунде. Но регулярный rsync снова испортит это. Задания cron должны быть настроены в соответствии с условиями гонки.

  3. идея: конвертировать -mtime +150 в yyyy-mm-dd (с помощью date -d "-150 days"), а затем сравните эту строку с именем папки, как это было предложено в ответе @xvan

Прошу помощи в поиске лучшего пути.

1 ответ

Решение

Вы можете использовать bash лексикографическое сравнение:

if [[ "2010-01-01" < "2011-02-02" ]]
  then echo "yes"
fi

РЕДАКТИРОВАТЬ: это немного трудно убежать <это сработало для меня.

find . ! -path . -type d -exec bash -c "[[ {} < 2010-02-02 ]]"  \; -print
Другие вопросы по тегам