안녕히 가세요.
폴더의 모든 "logA" 파일을 이동하고 3시간마다 타임스탬프를 추가한 다음 압축하는 스크립트를 만들고 있습니다.
이것이 스크립트의 기초입니다.
cd /logs
mv *logA+timestamp /backupDIR
cd /backupDIR
--그럼 GZIP 부분--
3시간마다 실행되므로 .gzip 파일이 /backupDIR에 이미 존재하는 경우도 있습니다. 견본:
logA.07132020-16.00.gz
logA.07132020-19.00.gz
logA.07132020-22.00.gz
logA.07142020-02.00
스크립트에서 압축 파일을 제외하는 방법은 무엇입니까? 여전히 .logA+timestamp가 있는지 확인하기 위해 루프를 수행해야 합니까?
답변1
프로그램 은 이미 이 작업을 수행합니다. 다음을 사용하여 파일 압축을 gzip
거부합니다..gz
gzip: <file>.gz already has .gz suffix -- unchanged
따라서 이미 압축된 파일을 제외할 필요는 없습니다.
오류 메시지를 표시하지 않으려면 를 사용하세요 gzip -q
.
답변2
gzip
실행할 명령을 제공하지 않았으므로 gzip *
or 와 같은 사소한 작업을 수행하고 있다고 가정하며 gzip someprefix*
이는 아마도 대부분의 경우 작동할 것입니다(참고유르겐의 답변.)
그러나 디렉터리에 고려하고 싶지 않은 파일이 많은 경우(고려하는 파일은 몇 개만 있음)할 수 있다매개변수 고갈 문제(및/또는 gzip
사용할 파일을 결정할 때 약간의 속도 저하)가 발생합니다.
이 문제를 해결하는 방법은 여러 가지가 있으며, 그 중 하나는 다음과 같습니다.
find /backupDIR -type f ! -name '*.gz' -print0 | xargs -0 gzip
하위 디렉터리를 순회하지 않으려면 다음과 같이 수정하세요.
find /backupDIR -maxdepth 1 -type f ! -name '*.gz' -print0 | xargs -0 gzip