![파일을 추출하기 위해 디렉토리 구조의 시작 부분을 건너뛰려면 어떻게 해야 합니까?](https://linux55.com/image/72778/%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EC%B6%94%EC%B6%9C%ED%95%98%EA%B8%B0%20%EC%9C%84%ED%95%B4%20%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC%20%EA%B5%AC%EC%A1%B0%EC%9D%98%20%EC%8B%9C%EC%9E%91%20%EB%B6%80%EB%B6%84%EC%9D%84%20%EA%B1%B4%EB%84%88%EB%9B%B0%EB%A0%A4%EB%A9%B4%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%ED%95%B4%EC%95%BC%20%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
파일을 저장하기 위해 절대 경로를 사용하여 tar 아카이브를 만들었습니다.
/home/mydir/dir1/dir2/dir3/file1.dat
/home/mydir/dir1/dir2/dir3/file2.dat
/home/mydir/dir1/dir2/dir3/file3.dat
경로의 앞부분을 건너뛰고 이 아카이브의 압축을 풀고 싶습니다 /home/mydir/dir1
. 내 파일은 다음 구조의 모든 디렉터리에 복원되어야 합니다.
dir2/dir3/file1.dat
dir2/dir3/file2.dat
dir2/dir3/file3.dat
tar 명령이나 다른 수단을 사용하여 이 작업을 어떻게 수행할 수 있습니까?
답변1
GNU tar를 사용하는 경우 추출 시 일부 선행 경로 멤버를 선택적으로 제거할 수 있습니다.
`--strip-components=number'
Strip given number of leading components from file names before extraction.
For example, suppose you have archived whole `/usr' hierarchy to a
tar archive named `usr.tar'. Among other files, this archive
contains `usr/include/stdlib.h', which you wish to extract to the
current working directory. To do so, you type:
$ tar -xf usr.tar --strip=2 usr/include/stdlib.h
(에서GNU tar 문서.)
귀하의 경우에는 --strip=3
신청해야 합니다.
답변2
GNU tar(비포함 Linux 및 Cygwin에 있음)를 사용하면 다음을 사용하여 아카이브에 멤버를 추가하거나 추출할 때 경로에 정규식 대체를 적용할 수 있습니다.--transform
옵션.
tar -xf foo.tar --transform='s!^/home/mydir/dir1/!!'
그리고*BSD 타르(OSX 포함)이라는 비슷한 옵션이 있습니다 -s
.
tar -xf foo.tar -s '!^/home/mydir/dir1/!!'
POSIX는pax
BSD tar와 동일한 옵션을 사용하는 명령입니다.
pax -r <foo.tar -s '!^/home/mydir/dir1/!!'