파일이 다른 디렉토리에 저장된 경우 상위 디렉토리 없이 tar 아카이브 생성

파일이 다른 디렉토리에 저장된 경우 상위 디렉토리 없이 tar 아카이브 생성

내 파일 시스템에는 다음 4개의 파일이 있습니다.

/home/martin/cvs/ops/cisco/b/s1
/home/martin/cvs/ops/cisco/b/s2
/home/martin/cvs/ops/extreme/b/r3
/home/martin/cvs/ops/j/b/r5

이 파일을 tar 아카이브에 넣어야 하는데 디렉토리를 추가하고 싶지 않습니다. 내가 생각할 수 있는 최선은 다음과 같습니다.

tar -C ~/cvs/ops/ -czvf archive.tgz cisco/b/s1 cisco/b/s2 extreme/b/r3 j/b/r5

아카이브의 모든 파일은 두 개의 디렉터리 깊이에 있으므로 여전히 완벽하지는 않습니다. 더 좋은 방법이 있나요? 아니면 s1, s2및 파일을 디렉토리에 복사하고 를 사용하여 아카이브를 생성 r3합니까 ?r5tar -czvf archive.tgz s1 s2 r3 r5

답변1

-C이 명령을 여러 번 사용할 수 있습니다 (한 디렉터리에서 다른 디렉터리로 이동하기 위해).

tar czvf archive.tar.gz -C /home/martin/cvs/ops/cisco/b s1 s2 -C ../../extreme/b r3 -C ../../j/b r5

-C옵션은 현재 디렉터리를 기준으로 해석됩니다.그 순간(아니면 절대 경로를 사용해도 됩니다.)

답변2

파일에 파일 목록이 있거나 명령을 사용하여 생성할 수 있는 경우 단일 GNU tar 명령을 사용할 수 있습니다.

tar cf foo.tar -T list-of-files --transform 's:.*/::'

변환을 통해 목차는 그대로 유지되지만 레이아웃이 완전히 평면화됩니다. 따라서 디렉토리, 즉 파일 목록을 필터링하는 방법이 필요합니다.

답변3

아카이브에 파일을 하나씩 추가할 수 있습니다.

tar cf /tmp/archive.tar -C /home/martin/cvs/ops/cisco/b s1
tar rf /tmp/archive.tar -C /home/martin/cvs/ops/cisco/b s2
tar rf /tmp/archive.tar -C /home/martin/cvs/ops/extreme/b r3
tar rf /tmp/archive.tar -C /home/martin/cvs/ops/j/b r5

이 스크립트를 작성하면 더 쉽게 만들 수 있습니다. 각 경로에 대해 경로를 추가하지 않고 tar rf기본 디렉터리를 매개변수 값으로 사용 -C하고 기본 파일 이름을 사용하여 실행합니다.

관련 정보