특정 모드로 파일을 개별적으로 압축하고 싶습니다. 예를 들어 다음과 같은 디렉터리가 있습니다.
/log/log1
-/1/log2/file.1
-/1/log2/file123
-/1/log2/file2.1
/log/log2
-/2/log2/file4.1
-/2/log2/file345
-/2/log2/file3.1
/log에서 확장자가 .1인 모든 파일을 반복적으로 압축하고 싶습니다.
결과는 다음과 같습니다.
/log/log1
-/1/log2/file.gz
-/1/log2/file123
-/1/log2/file2.gz
/log/log2
-/2/log2/file4.gz
-/2/log2/file345
-/2/log2/file3.gz
답변1
find
+bash
해결책:
find /log -type f -name "*.1" -exec bash -c 'gzip -nc "$1" > "${1:0:-2}.gz"; rm "$1"' _ {} \;
gzip
옵션:
-n
- 압축 시 기본적으로 원본 파일명과 타임스탬프는 저장되지 않습니다.-c
- 출력을 표준 출력에 기록합니다. 원본 파일은 변경되지 않습니다.
${1:0:-2}
bash
-의일부분; 마지막 2자가 잘린 파일 경로를 가져옵니다.
답변2
다음을 수행할 수 있습니다.
find /log -name '*.1' -type f -exec sh -c '
for file do
gzip "$file" && mv -i "$file.gz" "${file%.*}.gz"
done' sh {} +
우리는 일부 메타데이터를 압축 파일에 보존하고 충돌을 더 잘 처리하는 기능 의 이점을 얻기 위해 gzip file && mv -i file.gz newfile
vs.를 사용합니다.gzip < file > newfile && rm -f file
gzip
mv -i