여러 폴더가 있는 디렉터리가 있는데, 각 폴더에는 동일한 압축 파일 이름 "spark.log"를 가진 여러 .gz 파일이 포함되어 있습니다. 모든 파일의 압축을 한 번에 풀고 이름을 gz 파일로 바꾸는 방법은 무엇입니까?
내 데이터는 다음과 같습니다
폴더 목록
A
B
C
D
이들 각각에는 다음 파일이 있습니다.
A
spark.log.gz
spark.log.1.gz
spark.log.2.gz
spark.log.3.gz
B
spark.log.gz
spark.log.1.gz
spark.log.2.gz
spark.log.3.gz
C
spark.log.gz
spark.log.1.gz
spark.log.2.gz
spark.log.3.gz
D
spark.log.gz
spark.log.1.gz
spark.log.2.gz
spark.log.3.gz
포함된 각 gz 파일 내에서 spark.log
gz 이름을 기준으로 압축을 풀고 이름을 바꿀 수 있기를 원합니다. 예를 들면:
spark.log.1.gz
->spark.log.1.log
답변1
gzip
원래 이름은 저장되거나 저장될 수 있지만 다음을 실행하여 이름을 표시할 수 있습니다 gzip -Nl file.gz
.
$ gzip spark.log
$ mv spark.log.gz spark.log.1.gz
$ gzip -l spark.log.1.gz
compressed uncompressed ratio uncompressed_name
170 292 51.4% spark.log.1
$ gzip -lN spark.log.1.gz
compressed uncompressed ratio uncompressed_name
170 292 51.4% spark.log
gunzip
이 옵션을 넘기지 않으면 압축 해제된 파일 이름으로 사용되지 않으며 -N
, 접미사가 제거된 gzip 압축 파일 이름만 사용됩니다 .gz
.
zip
압축된 아카이브 형식 인 Info-ZIP 및 관련 형식의 명령 과 혼동할 수 있지만 zip
, gzip은 단지 압축기일 뿐입니다(예: compress
, bzip2
, xz
...) .
따라서 다음 파일 gunzip
없이 호출 하면 됩니다 .-N
gunzip -- */spark.log*.gz
spark.log
, spark.log.1
, ...을 얻게 됩니다 spark.log.2
( spark.log.1.log
의미가 없거나 가장 최근에 회전된 로그 파일이 아닌 서비스의 로그 파일 spark.1.log
로 해석될 수 있다는 의미는 아닙니다 ).spark.1
spark.log
하지만 로그 파일의 압축을 풀 이유가 거의 없습니다. 콘텐츠를 압축하면 일반적으로 콘텐츠 액세스 속도가 더 빨라집니다. 수정하는 데 비용이 더 많이 들 수 있지만 일반적으로 로그 파일을 보관/회전한 후에는 수정하지 않습니다. zgrep
, vim
, ( 그렇게 구성한 zless
경우에도 ) 을 사용하여 내용을 검사할 수 있습니다 . 사용하는 경우 가장 오래된 로그부터 최신 로그까지 모든 로그를 보냅니다 .less
zcat -f ./*.log*(nOn) | grep...
zsh
grep
답변2
이 bash
스크립트는 원하는 작업을 수행해야 합니다.
#! /usr/bin/env bash
for file in ./*/*.gz; do
newfile="${file/%.gz/.log}"
printf 'Extracting %s to %s\n' "$file" "$newfile"
gzip -dc "$file" > "$newfile"
# Use this instead if the .gz file should be deleted
# gzip -dc "$file" > "$newfile" && rm "$file"
done
A
,,,, 등의 폴더가 있는 경로에 있어야 합니다 B
.C
D
이 줄은 이름이 newfile="${file/%.gz/.log}"
바뀔 파일의 새 이름을 지정합니다(예:Spark.log.1.loggz
파일이 다음과 같은 경우 새 파일 이름이어야 합니다.Spark.log.1.gz) 현재 파일의 끝 부분을 교체하겠습니다
.${file/%.gz/.log}
.gz
이 printf
문은 필수는 아니지만 각 반복에서 발생하는 내용에 대한 자세한 출력을 보려는 경우 유용할 수 있습니다.
리디렉션과 함께 사용하면 gzip -dc
추출된 파일 이름에 대해 걱정할 필요 없이 작동한다는 의미입니다.