디렉터리를 가져오고 다른 위치에서 내 홈 디렉터리에 해당 디렉터리의 아카이브를 만들려고 합니다. 해당 -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
/b
c
/d
e
foo.tar
a
추가할 파일이 명령줄에 제공되지 않았지만 -C /some/dir
사용된 경우 해당 파일에 있는 모든 내용이 아카이브로 tar
전환되어 추가됩니다 ./some/dir
(따라서 압축을 풀 때 아카이브 파일을 찾을 -C
위치에는 영향을 미치지 않습니다 . 압축이 풀린 파일이 어디로 가는지에만 영향을 미칩니다.)tar
따라서 tar czf Pictures_$CREATION_TIMESTAMP.tar.gz -C /home/$USER Pictures
from은 항상 from 디렉토리 /home/$USER/coding/python_code/
에 아카이브를 생성합니다 ./home/$USER/coding/python_code/
Pictures
/home/$USER
에서 생성된 아카이브에 디렉터리를 추가하려면 Pictures
아카이브를 생성해야 합니다./home/$USER
/home/$USER
cd
/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)
공백이 없으므로 큰따옴표가 필요하지 않습니다. 압축 -C
만 Pictures
수행 되도록 중첩을 제거합니다 .