7일보다 오래된 파일 이름을 가진 파일 삭제

7일보다 오래된 파일 이름을 가진 파일 삭제

따라서 내 백업 서버의 모든 파일 이름은 archive-2021-03-18.zip, archive-2021-03-19.zip 등으로 지정됩니다. 이름이 7일보다 오래된 파일을 삭제하도록 cronjob을 설정하고 싶습니다.

누구든지 나를 도와줄 수 있나요?

답변1

그리고 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 ]]'])

답변2

아마도 이것은 좀 더 우아하게 할 수 있을 것입니다. 하지만 저는 단지 단순한 사람일 뿐입니다. 또한 이 스크립트는 새로운 줄이 포함된 파일 이름을 우연히 발견합니다(내 생애 이런 일은 한 번도 본 적이 없습니다).

$ 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"를 제거하세요.

답변3

find명령어를 확인해주세요 . 여기서는 실제 파일 날짜를 사용하고 있지만 이 명령은 검색할 파일 목록에서 정규식을 지원하므로 원하는 작업을 수행할 수 있어야 합니다.

# Find and delete files in the Daily tree more than four days old
# (rounding error means 4.23:59:59 is four days, so keep between three and five dailies)
find /dbdata/daily -mtime +3 -delete

편집: 이름으로 이 작업을 수행하는 것이 가능하지만 훨씬 더 어렵습니다. 예를 들어 오늘 날짜와 이전 7일을 표시하려는 형식으로 문자열을 생성하는 스크립트 루프를 만든 find다음 이를 find스위치 에 전달하여 -not -regex유지하려는 파일을 제외한 모든 것을 찾을 수 있도록 해야 합니다.

관련 정보