'tar'의 압축을 풀고 추출 할 디렉토리 이름을 변경하십시오.


26
tar -tf filename.tar
folder1/file
folder1/name
[...]

folder2에 파일이름 을 추출하고 싶습니다 . 이것을 한 줄짜리로 할 수 있습니까?

답변:


35

사용 -C--strip-components(참조 man tar).

예:

mkdir FOLDER
# for remote tar file
curl -L ’remote_tar_file' | tar -xz - -C FOLDER --strip-components=1

# for local tar file
tar -xzf FILENAME -C FOLDER --strip-components=1

설명:

-C플래그는 tar 파일의 내용이 그것으로 확장 할 수 있도록 디렉토리이 이미 가정합니다. 따라서 mkdir FOLDER.

--strip-components플래그는 tar 파일이 폴더로 자연스럽게 확장 될 때 사용됩니다 repo-name-master. 물론 여기서 생성 된 첫 번째 레벨 폴더가 필요하지 않으므로 첫 번째 폴더를 자동으로 제거 하도록 --strip-components설정 하십시오 1. 숫자가 클수록 더 깊은 중첩 폴더가 제거됩니다.


나는 읽었다 man tar. 발견하지 못했습니다 --strip-components. 좋은 것
Felipe Alvarez

1
tar-1.14는 --strip-path를 사용하고 tar-1.14.90 +는 --strip-components를 사용합니다. 여기에 문제가 있습니까?
Mikhail Moskalev

온라인 매뉴얼 상태 3 인수 스타일이 혼란을 초래할 때 스위치가 아닌 예제를 제공하면 이것을 찬성했습니다 .
Iain

tar -xz에서 -f를 잊어 버렸다고 생각합니다. 나를 위해 실패했습니다. 나는 내가이 모든 것을 이유없이 사용하고 있다고 생각했다.
John Carrell

17

--transform좀 더 융통성있게 옵션을 사용할 수도 있습니다 . sed 교체 작업을 허용합니다.

예를 들어, 다음은 패치를 적용 할 수 있도록 Linux tarball을 새 디렉토리에 추출하는 방법입니다.

tar -xjf linux-2.6.38.tar.bz2 --transform 's/linux-2.6.38/linux-2.6.38.1/'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.