0

我想通过 GNU find 清除包含所有内容的旧文件夹。我很熟悉,-mtime但目录的时间戳通常会被 rsync 破坏——这并不重要。幸运的是,时间戳被编码为目录名称yyyy-mm-dd

我怎样才能通过使用目录名而不是时间戳来做同样的事情?最佳读取解决方案是首选。

编辑:损坏的时间戳:

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 +150yyyy-mm-dd(使用date -d "-150 days"),然后将此字符串与文件夹名称进行比较,正如@xvan 的答案中所建议的那样

我请求帮助找到最好的方法。

4

1 回答 1

3

您可以使用 bash 字典比较:

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

编辑:这有点难以逃脱<,这对我有用。

find . ! -path . -type d -exec bash -c "[[ {} < 2010-02-02 ]]"  \; -print
于 2016-08-29T12:49:34.493 回答