내 파일 시스템에는 다음 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
합니까 ?r5
tar -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
하고 기본 파일 이름을 사용하여 실행합니다.