파일을 추출하기 위해 디렉토리 구조의 시작 부분을 건너뛰려면 어떻게 해야 합니까?

파일을 추출하기 위해 디렉토리 구조의 시작 부분을 건너뛰려면 어떻게 해야 합니까?

파일을 저장하기 위해 절대 경로를 사용하여 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는paxBSD tar와 동일한 옵션을 사용하는 명령입니다.

pax -r <foo.tar -s '!^/home/mydir/dir1/!!'

관련 정보