보존 기간이 있는 Bash 스크립트 tar 특정 파일

보존 기간이 있는 Bash 스크립트 tar 특정 파일

저는 bash 스크립팅을 처음 접했습니다. 한 달 동안 파일을 보관하고 나머지는 보관해야 합니다.

예:

파일 형식:WE20160225.log (월, 일, 20160225)

/oracle/Sales디렉터리에 2개의 파일이 있다고 가정합니다 .

WE20160130.log

WE20151201.log

WE20151201.log를 tar해야 합니다.

WE20160130.log의 경우에는 해당 파일이 한 달도 채 되지 않았기 때문에 해당되지 않습니다. 어떻게 해야 하나요? (파일 이름을 부분 문자열로 묶어야 할 수도 있음)

디렉토리를 변경할 수 있지만 다음에 무엇을 해야 할지 모르겠습니다. 내 논리는 파일을 반복하고 파일 이름에서 날짜를 가져온 다음 현재 날짜와 비교하는 것입니다.

파일 수정 날짜가 아닌 파일 이름 날짜를 사용해야 합니다.

SALES_DIR="/oracle/sales/"
cd $SALES_DIR

답변1

나는 다음과 같은 것을 사용합니다 :

find <dir> -name <pattern> -mtime <timeframe> -exec <cmd> <options> {} \;
find . -type f -name '*log*' -mtime +10 -exec tar -rvf backup$(date +"%m-%d-%y") {} \;

이름에 로그가 포함되어 있고 10일보다 오래된 파일을 찾습니다. 오늘 날짜를 포함하는 tar 아카이브를 만들고 모든 파일을 추가합니다. $date를 제거하고 새 파일만 추가한 다음 세미콜론을 사용하고 rm {} \;를 사용하여 파일을 삭제할 수도 있습니다.

답변2

다음과 같이 사용할 수 있습니다.

find somedir/* -mtime +5 -exec rm {} \;

find를 사용하여 5일보다 오래된 파일을 찾고 삭제를 위해 찾은 파일을 전달합니다.

답변3

다음은 한 달 전의 로그 파일을 압축하는 스크립트입니다.

#!/bin/bash
files=($(find /oracle/Sales -mtime +30))
tar cvfz backup.tar.gz "${files[@]}"

-mtime +number-of-days백업해야 하는 파일에 대해 설명합니다.

오래된 파일을 삭제하려면 다음을 시도하십시오

find /oracle/Sales -mtime +30 | xargs -n1 echo rm

올바른 출력을 얻으면 echo라인에서 제거하십시오.

관련 정보