폴더의 특정 파일을 gzip하는 방법은 무엇입니까?

폴더의 특정 파일을 gzip하는 방법은 무엇입니까?

안녕히 가세요.

폴더의 모든 "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

관련 정보