Linux

刪除文件名日期超過 7 天的文件

  • April 15, 2021

所以我備份伺服器上的所有文件都命名為archive-2021-03-18.zip、archive-2021-03-19.zip等。我想設置一個cronjob來刪除名稱超過7天的文件.

請問有人可以幫助我嗎?

zsh

#! /bin/zsh -
zmodload zsh/datetime || exit

cd /path/to/backups || exit

strftime -s oldest_to_keep archive-%F.zip $(( EPOCHSECONDS - 7 * 24*60*60 ))

rm -f archive-<->-<1-12>-<1-31>.zip(Ne['[[ $REPLY < $oldest_to_keep ]]'])

也許這可以更​​優雅地完成,但我只是一個簡單的人。此腳本還將偶然發現包含新行的文件名(我一生中從未遇到過):

$ cat archive_cleaner.sh
#!  /bin/bash

age="7 days ago"

find . -iname 'archive*zip' | while read name; do
       bname=`basename "$name"`
       bdate=`echo "$bname" | sed 's/archive-//;s/.zip//'`
       agemax=`date -d "$age" +%s`   || exit 1
       agesrc=`date -d "$bdate" +%s` || exit 2
       if [ $agesrc -lt $agemax ]; then
               echo /bin/rm -v "$name"
       fi
done

$ pwd
/tmp/test

$ find . -type f
./1/2/3/archive-2021-04-08.zip
./1/2/3/archive-2021-04-07.zip
./1/2/3/archive-2021-04-10.zip
./1/2/3/archive-2021-04-14.zip
./1/2/3/archive-2021-03-19.zip
./1/2/3/archive-2021-03-18.zip

$ archive_cleaner.sh
/bin/rm -v ./1/2/3/archive-2021-04-08.zip
/bin/rm -v ./1/2/3/archive-2021-04-07.zip
/bin/rm -v ./1/2/3/archive-2021-03-19.zip
/bin/rm -v ./1/2/3/archive-2021-03-18.zip

刪除第 11 行中的“echo”以實際刪除文件。

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