아카이브를 만들려고 합니다.
$ cd /tmp
$ tar -czf test1.tar.gz -C ~/Downloads/dir1 -C ~/Documents/dir2 -C ~/dir3/dir4/dir5
...이것은 그 안에 있는 디렉토리의 전체 경로를 보존해서는 안 됩니다.-C
결과
tar: Cowardly refusing to create an empty archive
Try 'tar --help' or 'tar --usage' for more information.
왜? 어떻게 고치나요?
답변1
귀하의 명령은 개념적으로 다음과 동일합니다.
tar -czf test1.tar.gz -C ~/Downloads/dir1 "" -C ~/Documents/dir2 "" -C ~/dir3/dir4/dir5 ""
인간의 관점에서 보면:
tar -czf test1.tar.gz
test1.tar.gz
: "다음과 같이 현재 작업 디렉토리라는 이름의 gzip으로 압축된 tar 아카이브를 만듭니다: ..."-C ~/Downloads/dir1 ""
: "...먼저 디렉토리로 전환한~/Downloads/dir1
다음 거기에 있는 모든 항목을 아카이브합니다..."-C ~/Documents/dir2 ""
: "...그런 다음 디렉터리로 전환~/Documents/dir2
하고 거기에 있는 모든 항목을 보관하세요..."-C ~/dir3/dir4/dir5 ""
: "...그리고 마지막으로~/dir3/dir4/dir5
거기로 전환해도 아무것도 보관되지 않습니다."
아마도 다음과 같은 것을 원할 것입니다.
tar -czf test1.tar.gz -C ~/Downloads/dir1 . -C ~/Documents/dir2 . -C ~/dir3/dir4/dir5 .
이는 "보관 안 함" 부분을 "현재 디렉터리의 내용 보관"으로 대체하며 해당 -C
옵션을 사용하도록 방금 전환되었습니다.
결과 아카이브를 추출하면 , dir1
및 dir2
의 아카이브 내용이 dir5
모두 추출 당시 현재 디렉터리로 추출됩니다. 원하는 것이면 괜찮지만 약간 특이한 사용 사례입니다. (이러한 아카이브를타르 폭탄일반적으로 추출 프로세스에서 생성된 단일 디렉터리에 깔끔하게 추출되지 않기 때문에 예기치 않게 발생하는 경우 일반적으로 싫어합니다. )
설명을 쉽게 하기 위해 약간 다른 명령을 사용하겠습니다.
tar -czf test2.tar.gz -C ~/Downloads dir1 -C ~/Documents dir2 -C ~/dir3/dir4 dir5
추출 하면 test2.tar.gz
다음과 같은 결과가 발생합니다.
./dir1
./dir2
./dir5
...그리고 그 내용.
답변2
tar
처리할 파일 매개변수를 제공하지 않았습니다 .
제공한 파일 인수가 존재하지 않거나 빈 문자열인 경우 tar
인쇄 no such file or directory
하고 종료됩니다. 누락된 매개변수의 경우 해당 오류를 인쇄합니다.
어쩌면 혼란스러워서 이것이 -C
입력 파일을 정의하는 것이라고 생각했을 수도 있습니다. 그러나 실제로는 그렇지 않습니다. -C
디렉토리만 변경되며 지침 순서가 -C
중요합니다.
-C, --directory=DIR
Change to DIR before performing any operations. This option is
order-sensitive, i.e. it affects all options that follow.
지시어 다음에 나오는 파일 매개변수의 상대 경로를 가져오는 데 사용됩니다 -C
.
아마도 당신은 다음을 원할 것입니다:
tar -czf test1.tar.gz ~/Downloads/dir1 ~/Documents/dir2 ~/dir3/dir4/dir5
답변3
IMHO, 아카이브 파일에 대한 절대(일종의) 경로를 제공하는 것은 좋은 생각이 아닙니다. 다음 명령을 사용하는 것이 더 좋습니다.
tar -czf /tmp/test1.tar.gz Downloads/dir1 Documents/dir2 dir3/dir4/dir5
나중에 파일을 추출하면 디렉터리 내에 하위 디렉터리가 생성됩니다.현재의귀하의 디렉토리가 아닌 디렉토리집목차