단일 tar 호출로 여러 .tar.gz 파일 추출


35

tar한 번의 실행으로 여러 파일을 추출 하도록 말할 수 있는지 궁금합니다 .

나는 몇 년 동안 경험 유닉스 사용자를 해요 물론 나는 당신이 사용할 수 있다는 것을 알고 for또는 find전화하거나 그런 일을 tar각각 보관을 위해 추출 할 번,하지만 난 인한 작업 명령 행에 올 수없는 내 tar두 개의 .tar.gz 파일을 한 번에 추출합니다. (그리고 아니오, 아무 문제가 없습니다 for. 나는없이 할 수 있는지 묻고 있습니다.)

나는 호기심이 아닌이 질문을하고 있습니다. 아마도

  • tar이것을 지원 하는 어딘가 의 이상한 포크가 있습니다.
  • 누군가 내가 시도했을 때 나에게 제안한 -M매개 변수 를 사용하는 방법을 알고 있습니다.tartar -zxv -f a.tgz -f b.tgz
  • 우리는 모두 장님 그리고 할 완전히 쉽게 -하지만 난 어떤 사용하지 않은 웹에서 힌트를 찾을 수 없습니다 for거나 find또는 xargs같은 또는를.

회신하지 마십시오 tar -zxvf *.tar.gz(즉 않기 때문에 하지 작업) 만 당신이 그것에 대해 확신이 있다면 "일을하지 않습니다"로 응답 (아마도 좋은 설명이 이유 도 참조).

편집 : Stack Overflow에 대한이 질문에 대한 답변을 지적했습니다 . 현재 tar구문 을 깨지 않고 는 불가능하지만 실제로는 그렇지 않습니다. 기존 구문을 사용 tar -zxv -f a.tgz -f b.tgz하거나 tar -zxv --all-args-are-archives *.tar.gz중단하지 않습니다 (imho).


호기심에서 루핑 구조를 피하는 방법에 대해 생각하게 된 상황은 무엇입니까?
unclejamil

1
참고 : GNU tar는 매개 변수를 사용하여 다중 볼륨 tar 아카이브 를 지원합니다 -M.
Steve-o

1
unclejamil : HowTo를 작성 중이며 그중 하나의 단계는 여러 압축 파일 (.tar.bz2, .tar.gz, .zip)의 압축을 푸는 것입니다. 그리고 HowTo이기 때문에 가장 우아한 명령 줄이 무엇인지 궁금합니다. :)
scy

답변:


38

이것이 가능합니다. 문법은 매우 쉽습니다 :

$ cat *.tar | tar -xvf - -i

-i 옵션은 man 페이지에서 tar 아카이브의 끝에있는 EOF를 무시합니다.

-i, --ignore-zeros
ignore blocks of zeros in archive (normally mean EOF)

1
이것은 나를 위해 작동하는 것 같았습니다. 내가 사용한 정확한 명령은 다음과 같습니다 cat *.tar.bz2 | tar -ixjv. 감사!
scy

1
<tgz의 경우> cat * .tgz | tar -xzvf--i -C / destination / <또는> * .tgz의 파일; tar -xzvf $ file -C / destination /;을 수행하십시오. 완료
Ferroao

27

* .tar.gz 용

for file in *.tar.gz; do tar -zxf "$file"; done

* .tar.bz2의 경우

for file in *.tar.bz2; do tar -jxf "$file"; done

* .tar.xz의 경우

for file in *.tar.xz; do tar -Jxf "$file"; done

1
여기에서 서식을 수정하면 더 읽기 쉽습니다.
eyoung100

이것은 대단하다. 형식은 터미널에서 보이는 방식이기 때문에 훌륭합니다
smatthewenglish

1
$file파일 이름에 공백이 있으면 따옴표를 묶는 것을 잊지 마십시오 .
Alexander Revo

tar의 단일 호출을 사용하여 여러 아카이브를 추출 할 수 있는지에 대한 질문에는 실제로 대답하지 않습니다. 또한 사용자는 for 루프를 사용하여 일련의 파일을 반복하는 방법에 이미 익숙하다고 말합니다.
Kusalananda

2

루프를 사용해야합니다. tar여러 -f옵션 을 허용하기 위해 명령 줄 구문을 위반 하지는 않지만 모든 종류의 엣지 조건에서 여러 아카이브를 순서대로 처리하는 코드를 추가해야합니다 (중간에 아카이브 형식이 잘못된 경우 어떻게됩니까? 압축 메커니즘? 여러 -C옵션 (특정 디렉토리로 추출하기위한 GNU tar 옵션)도있을 수 있습니까? -K (특정 구성원 이름으로 시작하는 GNU tar 옵션)는 어떻습니까? ...).

for루프를 피할 수있는 한 가지 가능성 은 아카이브에 대한 투명한 액세스를 제공 하는 FUSE 파일 시스템 인 AVFS 를 설치하고 활성화 하는 것 입니다. 각 아카이브 는 디렉토리로 두 배가됩니다 . 아카이브를 와일드 카드와 일치 시키려면 와일드 카드 일치 에이를 추가해야 합니다. zsh에서 수행 할 수 있습니다./path/to/archive~/.avfs/path/to/archive##

mountavfs
cp -p ~/.avfs$PWD/{a,b}.tgz\#/* /destination
cp -p ~/.avfs/path/to/source/*.tgz(e\''REPLY=$REPLY\#'\')/* /destination

-1

find . -name "*.tar.gz" -exec tar xzf {} \;


이것은 무엇을 하는가?
Pierre.Vriens

1
이것은 찾은 각 파일에 대해 tar를 한 번 호출하는 암시 적 루프를 도입하며 사용자는 이미이 작업을 수행하는 방법을 알고 있다고 말합니다.
Kusalananda

죄송하지만 질문을주의 깊게 읽지 않았습니다. 여러 타르 팩을 추출하고 위의 답변을 읽고 찾기가 더 쉬울 것이라고 생각했습니다.
zjengjie
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.