파일을 저장하기 위해 절대 경로를 사용하여 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/!!'