Bash 스크립트의 "find" 명령에 대해 혼란스러우신가요?

Bash 스크립트의 "find" 명령에 대해 혼란스러우신가요?

폴더를 자동으로 TAR링하고 백업하기 위해 더 이상 의미를 설명할 수 없는 사람이 만든 bash 스크립트가 있습니다. 현재 나는 마지막 줄에 대해 혼란스러워합니다.

find '/home/_backups/pokebrawl' -mtime +6 -type f -delete

전체 스크립트는 다음과 같습니다.

#!/bin/bash
#Purpose = Backup of Important Data
#Created on 17-1-2012
#Author = Hafiz Haider
#Version 1.0
#START
TIME=$(date +"%m-%d-%Y-%T")
FILENAME=pokebrawl-$TIME.tar.gz
SRCDIR=/home/servers/brawl/world
DESDIR=/home/_backups/pokebrawl
tar -cpzf $DESDIR/$FILENAME $SRCDIR
find '/home/_backups/pokebrawl' -mtime +6 -type f -delete
#END

답변1

이 명령은 7일 이상(더 정확하게는 지난 주) 동안 수정되지 않은 find디렉터리 안이나 아래의 모든 일반 파일을 삭제합니다 ./home/_backups/pokebrawl

그래야 한다아마도읽다

find "$DESDIR" -mtime +6 -type f -delete

또는

find "${DESDIR:?Not set correctly}" -mtime +6 -type f -delete

해당 디렉토리 이름을 보유하는 아주 좋은 변수가 이미 있기 때문입니다. 두 번째 변형은 어떤 이유로 비어 있거나 설정되지 않은 경우 DESDIR오류를 발생시킵니다 .

나는 이것이 지난 주의 백업만 유지하는 방법이라고 가정하고 있습니다. 더 많은 공간을 사용하지 않고도 더 오랜 기간 동안 백업을 보관할 수 있는 borgbackup또는 같은 것을 사용하는 것이 좋습니다 (데이터가 많이 변경되지 않으면 1년 분량의 시간별 백업도 많은 공간을 차지하지 않습니다). restic데이터 중복을 제거하고 borgbackup압축도 지원합니다(둘 다 원격 백업 및 암호화 지원).

24시간(자정)마다 스크립트를 실행하려면 크론 작업을 사용하세요.

먼저 명령을 실행하십시오 crontab -e. 그러면 활성 사용자의 현재 crontab이 포함된 편집기가 열립니다(빈 ​​파일일 수도 있고 아닐 수도 있음).

그런 다음 추가

@daily /path/to/the/script.sh

( path/to/the/script.sh스크립트의 경로 이름은 어디에 있습니까?)

편집기를 저장하고 종료합니다.

이제 스크립트는 자정이나 밤에도 호출됩니다.

매일 오후 13시 30분에 스크립트를 실행하려면 crontab 항목으로 다음을 추가하세요.

30 13 * * * /path/to/the/script.sh

crontab 일정을 작성하는 방법에 대한 자세한 내용은 man 5 crontab해당 시스템의 crontab 매뉴얼( )을 참조하세요.

답변2

find '/home/_backups/pokebrawl' -mtime +6 -type f -delete

/home/_backups/pokebrawl그러면 지난 며칠 동안 수정되지 않은 디렉터리의 모든 파일을 찾아서 +6삭제합니다. 참고: +67일에 해당합니다.

man find이 스위치의 작동 방식을 확인하세요 .

$ man find
...
   -mtime n
          File's data was last modified n*24 hours ago.  See the comments 
          for -atime to understand how rounding affects the interpretation 
          of file modification times.

Redhat 배포판에서는 이 스크립트를 디렉터리에 넣으면 /etc/crondaily매일 실행됩니다. 예제로 사용할 수 있는 다른 스크립트가 이미 있음을 확인할 수 있습니다.

$ sudo ls -l /etc/cron.daily/
total 12
-rwx------. 1 root root 219 Aug  1  2017 logrotate
-rwxr-xr-x. 1 root root 618 Mar 17  2014 man-db.cron
-rwx------. 1 root root 208 Nov  4  2016 mlocate

관련 정보