tar – 폐기 디렉토리 구조 추출 -j아카이브의 디렉토리 구조를 버리고 모든 파일을

unzip은 멋진 옵션을 가지고있어 -j아카이브의 디렉토리 구조를 버리고 모든 파일을 동일한 디렉토리로 추출합니다.

만드는 방법이 tar같은 방식으로 사용할 수 있습니까? 매뉴얼 페이지에 아무것도 표시하지 않는 것 같습니다.

그렇다면이를 가능하게 해줄 대안, 가급적 자유 소프트웨어 도구가 있습니까?



답변

GNU 타르는 기능성 염에 살고 있으므로 당연히 이에 대한 몇 가지 옵션이 있습니다.
http://www.gnu.org/software/tar/manual/html_node/transform.html

당신은 다음 몇 가지 경로 세그먼트를 제거하려는 경우 --strip-components=n또는 --strip=n자주 할 것입니다 :

 tar xvzf tgz --strip=1

그러나 추출 할 파일을 정규식으로 다시 작성할 수도 있습니다 (플래그가 --transform있거나 수정 자를 --xform사용하여 ereg를 허용 함 /x).

 tar xvzf tgz --xform='s#^[^/]+#.#x'
                 # or 's#^.+/##x' for discarding all paths

타르를 나열하려면 추가 --show-transformed옵션 이 필요합니다 .

 tar tvzf tgz --show-transformed --strip=1 --xform='s/abc/xyz/x'

나는 다시 쓰기 옵션이 추출뿐만 아니라 포장에도 효과적이라고 생각합니다. 그러나 pax분명히 더 좋은 구문이 있습니다.


답변

두 단계로 쉽게 수행 할 수 있습니다. 필요에 따라 조정하십시오.

$ mkdir /tmp/dirtree
$ tar xfz /path/to/archive -C /tmp/dirtree
$ find /tmp/dirtree -type f -exec mv -i {} . \;
$ rm -rf /tmp/dirtree


답변

pax 할 수있어:

pax -v -r -s '/.*\///p' < archive.tar

또는

zcat archive.tar.gz | pax -v -r -s '/.*\///p'

-r옵션 을 생략하여 이름 교체 작업을 먼저 확인할 수 있습니다 .


답변

아무것도 설치하지 않아도되는 가능한 솔루션입니다.

  1. a tar tvf를 사용 하여 tarball에서 모든 파일을 가져옵니다.
  2. 해당 파일을 개별적으로 추출하십시오-tar를 stdout으로 추출하고 $ filename으로 리디렉션하십시오.

    tar -tvf $1 | grep -v "^d" | \
                  awk '{for(i=6;i<NF+1;i++) {printf "%s ",$i};print ""}' |\
                  while read filename
                  do
                     tar -O -xf $1 "$filename" > `basename "$filename"`
                  done
    

extract.sh로 저장하고로 실행하십시오 extract.sh myfile.tar. 또한 tarball에서 가져온 디렉토리에서 발견 된 중복 파일 이름을 덮어 씁니다.


답변

tar xf foo.tar.gz foo/path/to/file/bar.mp3 -O > bar.mp3

-O옵션은 파일을 표준 >출력으로 추출하고 해당 출력을 파일로 리디렉션합니다. 내 예에서는 foo.mp3을 추출하여 bar.mp3로 리디렉션합니다. 파일 이름은 임의적입니다.


답변