'tar'명령을 사용하여 다른 디렉토리로 파일을 추출하는 방법은 무엇입니까?


672

나는 효과가 있다고 생각 tar archive.tar /users/mylocation했지만 그렇지 않습니다. 어떻게해야합니까?


1
또한 -C, --directory DIR\n change to directory DIR로 설명해야합니다 change output directory to DIR (will fail if DIR doesn't exist). 감사합니다 @Mich. @Bryan_Larsen의 답변도 참조하십시오.
유효한

1
@Ujjwal Sing : 실제로 tar 매뉴얼 페이지는 그다지 도움이되지 않습니다. "-C DIR"을 "디렉토리 DIR로 변경"으로 설명합니다. 더 나쁜 것은 "tar -C mydir xf archive.tar"는 작동하지 않지만 "tar xf archive.tar -C mydir"은 작동하지 않습니다.
Pat Morin

@PatMorin 공평하게 말하면, 사용하는 인수 호출 규칙을 이해하면 의미가 있습니다. 당신은 또한 할 수있다 tar xfC archive.tar mydirtar -C mydir -xf archive.tar. 솔직히 예상되는 것처럼 전통적인 스타일과 GNU 스타일 플래그 만 혼합하여 문제를 해결합니다. 전통적인 플래그는 첫 번째 인수로 하나의 얼룩으로 전달됩니다. 그들이 처음이 아니라면 그들이 작동 할 것으로 기대할 수 없습니다. (그렇습니다, 어쨌든 그것을 해석하는 것이 가능합니다-제 요점은 표준이 아니라 그 이상입니다)
Nic Hartley

답변:


958

현재와 ​​다른 디렉토리로 아카이브를 추출하려면 다음 -C과 같이 , 또는 --directory, tar 옵션을 사용하십시오 .

tar -xf archive.tar -C /target/directory

해당 명령을 실행하기 전에 대상 디렉토리가 있어야합니다 (에 의해 작성 될 수 있음 mkdir /target/directory).

다른 옵션에 대해서는 매뉴얼 페이지 (명령 :)를 읽으십시오 man tar.


경로를 제거 할 수 있습니까? 즉 파일을 검색하십시오
zzapper

3
더 큰 파일 인 경우 명령을 실행할 때 작업하는 동안 몇 초 또는 몇 분 동안 출력되지 않습니다. 추출 할 때 각 파일의 이름을 나열하는 -v플래그 ( verbose mode )를 추가하여이 문제를 해결할 수 있습니다 .
IQAndreas

이 문제가 --strip-components=1발생하면 다른 답변 의 조언도 참고하십시오 .
DreadPirateShawn


9
모든 옵션 tar이 누적 된 이후 몇 년이 지난 후에도 출력 디렉토리가 존재하지 않는 경우 여전히 출력 디렉토리작성할 수 있는 옵션 이 없다는 것이 놀랍지 않습니까?
EM0

260

tarball에 변경하려는 디렉토리 이름이 이미 포함되어 있으면 다음 --strip-components=1옵션을 추가하십시오 .

tar xf archive.tar -C /target/directory --strip-components=1

2
감사합니다. wget / etc를 통한 다운로드에는 항상 '부모'디렉토리가 있습니다. 이것은 완전한 답변입니다-또는 위의 답변에서 언급해야합니다.
bshea

내가 찾던 것. --strip-components다른 버전을 사용하는 프로 비저를 실행할 때 매우 유용합니다. 이 방법 /target/directory은 공급자가 보관 폴더 이름을 지정하는 방법에 대해 걱정할 필요없이 일반적인 이름 일 수 있습니다.
Jack_Hu

30

이전 답변과 의견을 결합 :

컨텐츠를 추출하고 누락 된 경우 대상 디렉토리를 작성하려면 다음을 수행하십시오.

mkdir -p /target/directory && tar xf archive.tar -C /target/directory

zip에서 루트 (첫 번째 레벨) 디렉토리를 추출하고 제거하려면

mkdir -p /target/directory && tar xf archive.tar -C /target/directory --strip-components=1

20

또 다른 옵션은 --one-top-level을 사용하는 것입니다. 원본의 파일 이름을 기준으로 디렉토리가 자동으로 생성됩니다.

tar zxvf filename.tgz --one-top-level

또한 원하는 경우 직접 지정할 수 있으며 tar가 자동으로 작성합니다.

tar zxvf filename.tgz --one-top-level=new_directory

3
GNU tar 1.26을 사용하고 있는데 다음과 같이 인식 할 수없는 옵션 오류가 발생합니다.--one-top-level
Emma Strubell

이것이 내가 필요한 대답입니다. 디렉토리 이름을 지정하거나 이름에 대한 파일을 다시 참조하는 특수 코드를 기억해야 할 때 매우 유용합니다. 감사합니다.
Hypocritus

2

추출과 관련하여 흥미로운 점은 아카이브를 만든 방법에 달려 있다는 것입니다.이 예제를 참조하십시오.

cd /tmp
mkdir folder
touch folder/file.txt

tar -zcvf folder.tar.gz folder모든 작업이 예상대로 완료되면 = untar 작업을 수행 하면 untarred 상태가됩니다 (폴더를 제거한 경우 폴더가 생성됨) /tmp/folder/.

그러나 tar를 작성 tar -zcvf tmp-folder.tar.gz /tmp/folder하고 / tmp 폴더에 압축을 풀면 /tmp/tmp/folder디렉토리가됩니다! 이런 경우에는 /-에 untar해야합니다.tar -xf tmp-folder.tar.gz -C /


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