Как найти каталоги старше даты, когда дата закодирована в 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
Файлы внутри папок имеют правильные метки времени.
идея: очистить файлы с
find -mtime
а затем (второй раунд) очистить пустые папки. Скорее всего, невозможно выполнить оба в одном раунде, так как-empty
будет применяться к файлам, а также.Идея: исправить метки времени каталогов в один раунд (в соответствии с их именем), а затем очистить все
find -mtime
в другом раунде. Но регулярный rsync снова испортит это. Задания cron должны быть настроены в соответствии с условиями гонки.идея: конвертировать
-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