저는 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
라인에서 제거하십시오.