여러 파일을 특정 폴더에 한 번에 압축하는 방법은 무엇입니까?

여러 파일을 특정 폴더에 한 번에 압축하는 방법은 무엇입니까?

/mydata여러 파일이 포함된 gz폴더 가 있습니다 .

원본 zip을 유지하면서 다른 폴더에 모두 압축을 풀고 싶습니다./myoutput

어떻게 해야 하나요? 압축 해제 과정도 추적할 수 있나요?

감사해요!

답변1

gzip, basename및 루프를 사용하십시오 .

for pathname in /mydata/*.gz; do
    gzip -dc "$pathname" >"/myoutput/$( basename "$pathname" .gz )"
done

이는 일치하는 모든 경로 이름에 대해 반복되며 , 각 이름에 대해 파일( )의 압축을 표준 출력( )으로 푸는 /mydata/*.gz데 사용됩니다 . gzip출력은 으로 리디렉션됩니다. 파일 이름은 원본 파일과 동일하지만 파일 이름 접미사가 없습니다(경로 이름에서 비트를 제거하고 초기 문자열을 제거하기 위해).-d-c/myoutput.gzbasename/mydata/

루프 내의 명령은 다음과 같이 작성할 수도 있습니다.

gzip -d -o "/myoutput/$( basename "$pathname" .gz )" "$pathname"

이렇게 하면 gzip리디렉션을 통하지 않고 출력 파일을 직접 쓸 수 있습니다.

이는 아래 파일을 /mydata읽을 수 있고 /myoutput.

답변2

  • 루트 바로 아래에 대상 디렉터리를 두고 싶다면 적절한 소유권(및 사용 권한)을 부여하세요.

    sudo mkdir /myoutput
    sudo chown $USER /myoutput
    
  • 디렉토리를 파일이 포함된 디렉토리로 변경합니다 gz.

    cd /mydata
    
  • 다음 명령줄을 실행하세요.

    for i in *.gz;do echo -n "${i/.gz}|";zcat "$i" > "/myoutput/${i/.gz}";done; echo ""
    

관련 정보