폴더 이름의 날짜를 기준으로 별도의 백업 폴더가 있는 전체 폴더와 델타 폴더에 대한 두 개의 폴더가 있습니다. 예를 들면 다음과 같습니다.
cd /backup/Full
Jul 12 17:52 01-07-2017
Jul 12 18:32 08-07-2017
Jul 15 18:20 15-07-2017
cd /backup/Incremental
Jul 13 12:01 02-07-2017
Jul 13 12:09 03-07-2017
Jul 13 12:14 04-07-2017
Jul 13 12:22 05-07-2017
Jul 13 12:36 06-07-2017
Jul 13 12:47 07-07-2017
Jul 13 12:49 09-07-2017
90일 전 폴더를 날짜를 기준으로 폴더 이름으로 계산하는 스크립트를 실행하고 싶습니다.2017년 1월 7일(엄격히 폴더 생성 날짜에 관계없이) 삭제하세요. 동일한 조건으로 두 개의 스크립트를 실행해야 합니다. 첫 번째는 전체용이고 두 번째는 증분용입니다.
답변1
찾다. -type d -mtime +90 -exec rm {}\;
- 현재 디렉터리(.)에서 90일(f)이 지난 파일을 찾아 삭제 명령(rm)을 실행합니다.
. 디렉토리 경로로 대체 가능/
답변2
Bash 스크립트를 만드는 것이 좋습니다.
- yyyymmdd 형식의 int로 정렬할 폴더 이름을 가져옵니다.
- currentdate-90을 yyyymmdd 형식의 int로 계산합니다.
- currentdate-90 아래에 변수를 나열하고 dd-mm-yyyy 형식으로 다시 변경합니다.
- 나열된 디렉터리에 대해 rm을 실행합니다.
하지만 누군가가 더 잘할 수도 있지
답변3
@Krzysztof Stasiak이 설명한 구현은 다음과 같습니다.
먼저 몇 가지 테스트 디렉터리를 만듭니다.
cd /backup
mkdir Full/20170{1,7}02
mkdir Incremental/2017010{1..9}
mkdir Incremental/2017070{1..9}
그리고 스크립트:
#! /bin/bash
cd /backup
for P in Full Incremental; do
cd $P
for D in *; do
[ $(date -d '-90 days' +%Y%m%d) -gt $D ] && rm -rf $D
done
cd ..
done
테스트를 위해 echo
before 를 추가하여 rm
수행되지만 실행되지는 않는 작업을 확인할 수 있습니다.
여기서는 cd
홈 디렉터리로 이동하여 for
두 디렉터리 모두에 대해 루프를 시작합니다.
cd /backup
for P in Full Incremental; do
그런 다음 "기간" 디렉터리로 CD를 이동합니다.
cd $P
그런 다음 for
모든 디렉터리를 반복합니다.
for D in *; do
-gt
오늘 빼기 90일 이 디렉토리 보다 큰 경우 $D
:
[ $(date -d '-90 days' +%Y%m%d) -gt $D ]
그런 다음 디렉터리를 삭제합니다.
&& rm -rf $D
다음과 같이 작성할 수도 있습니다.
if [ $(date -d '-90 days' +%Y%m%d) -gt $D ]; then
rm -rf $D
fi
표준 백업 소프트웨어 사용을 고려하십시오. 아마 바쿠라일 겁니다.