Linux

查找+刪除日期格式的文件

  • January 14, 2020

我們有以下日誌

/var/log/sync/manager.log.2018-06-14-00
/var/log/sync/manager.log.2020-01-14-07
/var/log/sync/manager.log.2020-01-14-02
/var/log/sync/manager.log.2020-01-14-03
/var/log/sync/manager.log.2020-01-14-04
/var/log/sync/manager.log.2020-01-14-34
/var/log/sync/manager.log.2020-01-10-06
/var/log/sync/manager.log.2020-01-14-04
/var/log/sync/manager.log.2019-04-14-05
/var/log/sync/manager.log.2020-01-14-06
/var/log/sync/manager.log.2020-01-14-76
/var/log/sync/manager.log.2020-01-14-982

我們要刪除日期格式的日誌,例如 -2020-01-14-06

我創建了以下

find  var/log/sync/  -type f -mmin +60  -regex '.*\.log.*[0-9]$' -delete

但它在“.log”之後刪除了每個結束的數字。

d='[0123456789]'
LC_ALL=C find /var/log/sync -name "*.log.$d$d$d$d-$d$d-$d$d-$d$d" \
 -type f -mmin +59 -delete

(注意-mmin-delete是非標準擴展)。

使用 GNU find,要刪除超過 60 分鐘的文件,它是-mmin +59(或\( -mmin 60 -o -mmin +60 \))。

我認為你的正則表達式不行。你有.*\日誌之後,這意味著日誌之後的一切都很好,最後是一個數字。它應該是:

find var/log/sync/ -type f -mmin +60 -regextype sed -regex '.*\.log\.[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}-[0-9]\{2,3\}$' -delete

-regextype sed至少在我的電腦上需要啟用量化器,例如\{2\}.

引用自:https://unix.stackexchange.com/questions/561991