파일 이름의 날짜를 기준으로 오래된 백업 폴더를 삭제하는 방법

파일 이름의 날짜를 기준으로 오래된 백업 폴더를 삭제하는 방법

폴더 이름의 날짜를 기준으로 별도의 백업 폴더가 있는 전체 폴더와 델타 폴더에 대한 두 개의 폴더가 있습니다. 예를 들면 다음과 같습니다.

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 스크립트를 만드는 것이 좋습니다.

  1. yyyymmdd 형식의 int로 정렬할 폴더 이름을 가져옵니다.
  2. currentdate-90을 yyyymmdd 형식의 int로 계산합니다.
  3. currentdate-90 아래에 변수를 나열하고 dd-mm-yyyy 형식으로 다시 변경합니다.
  4. 나열된 디렉터리에 대해 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

테스트를 위해 echobefore 를 추가하여 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

표준 백업 소프트웨어 사용을 고려하십시오. 아마 바쿠라일 겁니다.

관련 정보