Tar는 --directory 옵션을 무시합니다.

Tar는 --directory 옵션을 무시합니다.

디렉터리를 가져오고 다른 위치에서 내 홈 디렉터리에 해당 디렉터리의 아카이브를 만들려고 합니다. 해당 -C옵션을 이 목적으로 사용할 수 있다는 것을 알고 있지만 tar무시되는 것 같습니다. $(basename $DEST)_$(date +%F_%H%M%S).tar.gz -C $HOME $(basename $DEST)보관하려는 디렉토리의 경로가 어디에 있는지 시도해 보았습니다 . $DEST내 홈 디렉토리에 아카이브를 생성하는 대신 tar는 내가 실행한 디렉토리에 아카이브를 계속 생성합니다. tar를 실행하는 방식에 문제가 있나요? 플래그가 완전히 무시된다는 점을 제외하면 다른 모든 것은 잘 작동하는 것 같습니다 -C. 저는 Linux Mint 18.3 XFCE 버전을 사용하고 있습니다.

편집하다:완전한 명령은 입니다 tar czf Pictures_$CREATION_TIMESTAMP.tar.gz -C /home/$USER Pictures./home/$USER/coding/python_code/

답변1

-C아카이브가 생성되는 위치에는 영향을 주지 않습니다. 이는 아카이브에 추가되는 파일에만 영향을 미칩니다. 예를 들어, 주어진 경우 tar cvf foo.tar a -C /b c -C /d e현재 디렉토리에서 추가하고 tar, 전환하여 추가하고, 전환하여 추가합니다. 현재 디렉터리(원래 디렉터리)에 생성됩니다.a/bc/defoo.tara

추가할 파일이 명령줄에 제공되지 않았지만 -C /some/dir사용된 경우 해당 파일에 있는 모든 내용이 아카이브로 tar전환되어 추가됩니다 ./some/dir

(따라서 압축을 풀 때 아카이브 파일을 찾을 -C위치에는 영향을 미치지 않습니다 . 압축이 풀린 파일이 어디로 가는지에만 영향을 미칩니다.)tar

따라서 tar czf Pictures_$CREATION_TIMESTAMP.tar.gz -C /home/$USER Picturesfrom은 항상 from 디렉토리 /home/$USER/coding/python_code/에 아카이브를 생성합니다 ./home/$USER/coding/python_code/Pictures/home/$USER

에서 생성된 아카이브에 디렉터리를 추가하려면 Pictures아카이브를 생성해야 합니다./home/$USER/home/$USERcd/home/$USER

cd "/home/$USER"; tar czf "Pictures_$CREATION_TIMESTAMP.tar.gz" Pictures

또는 아카이브 경로를 지정하십시오.

tar czf "/home/$USER/Pictures_$CREATION_TIMESTAMP.tar.gz" -C "/home/$USER" Pictures

답변2

가장 가까운 곳에서tar매뉴얼 페이지:

-C, --directory=목차

작업을 수행하기 전에 DIR로 변경하십시오. 이 옵션은 순서를 구분합니다.모든 후속 옵션에 영향을 미칩니다..

예를 들어 디렉터리를 보관하는 올바른 방법은 다음 /srv/www과 같습니다.

tar -C /srv/www -czf www.tgz

-C(참고로 <directort>로 시작해야 하기 때문에 옵션으로 이해되도록 a로 표현 해야 합니다 .)-czf-

물론 언제든지 cd다음을 명시적으로 수행할 수 있습니다.

(cd /srv/www; tar czf - .) > www.tgz

답변3

수정해 주셔서 감사합니다.

아카이브할 파일 이름과 디렉터리를 지정하기 위해 쉘 변수와 명령 대체를 사용하고 있는 것 같습니다.

이는 귀하의 요구 사항에 적합합니다.

tar czfv $HOME'/Pictures_'$CREATION_TIMESTAMP'.tar.gz' "$DEST" -C Pictures

v무슨 일이 일어나고 있는지 자세히 볼 수 있도록 추가했습니다 . 변수 $HOME는 분명히 홈 디렉토리로 확장됩니다. $CREATION_TIMESTAMP는 시간 변수라고 생각합니다. 귀하의 명령문은 $DEST보관하려는 디렉토리의 경로를 지정하므로 일반적으로 위치의 끝에 있습니다. 경로에 공백이 포함된 경우를 대비해 큰따옴표로 묶었지만 $DEST공백이 없으면 제거할 수 있습니다. $CREATION_TIMESTAMP가 위와 같으면 $(date +%F_%H%M%S)공백이 없으므로 큰따옴표가 필요하지 않습니다. 압축 -CPictures수행 되도록 중첩을 제거합니다 .

관련 정보