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
옵션 을 생략하여 이름 교체 작업을 먼저 확인할 수 있습니다 .
답변
아무것도 설치하지 않아도되는 가능한 솔루션입니다.
- a
tar tvf
를 사용 하여 tarball에서 모든 파일을 가져옵니다. -
해당 파일을 개별적으로 추출하십시오-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로 리디렉션합니다. 파일 이름은 임의적입니다.