root@server # tar fcz bkup.tar.gz /home/foo/
tar: Removing leading `/' from member names
이 문제를 어떻게 해결 /
하고 파일 이름을 유지할 수 있습니까?
-C /
때 지정 하십시오.
root@server # tar fcz bkup.tar.gz /home/foo/
tar: Removing leading `/' from member names
이 문제를 어떻게 해결 /
하고 파일 이름을 유지할 수 있습니까?
-C /
때 지정 하십시오.
답변:
사용 --absolute-names
하거나 -P
이 기능을 비활성화하는 옵션을 선택합니다.
tar fczP bkup.tar.gz /home/foo/
tar fcz bkup.tar.gz --absolute-names /home/foo
-C /
@Marcus의 답변에 설명 된 옵션을 사용하면 기본 목표 인 경우 STDERR 메시지가 사라집니다.
실제로는 문제가 아니라 기능입니다. 절대 위치가있는 아카이브는 보안 위험이 있습니다. 공격자는 이러한 아카이브를 사용하여 중요한 시스템 위치에 파일을 설치하도록 사용자를 속일 수 있습니다.
예, 사용할 수 있습니다 -P
. 그러나 tar가 슬래시를 제거하고 아카이브 사용자가 루트 디렉토리에서 추출을 명시 적으로 수행하도록 요구하면 무엇이 문제입니까? 그런 다음 그들은 의식적으로 중요한 시스템 위치에 영향을 미치며 우연히 그렇게 할 수 없습니다.
tar
. 이 특정 메시지는 tar
상태 인으로 종료 1
되었습니다 tar
.이 메시지는 STDERR에이 메시지를 쓰고 있었기 때문에 성공적인 백업에 대해 잘못된 이메일 경고를 수신하게했습니다 . 나는 나만의 수정 된 cd /path/to/network/share && tar -cJf scripts.backup.tar.xz -C / home/user/scripts 2>/dev/null || [send an email alert]
-P
예를 들어 FUSE에서 일종의 파일 시스템 스냅 샷 기능을 제공하는 경우와 같은 사용 사례가 있다고 생각 합니다. 때때로 cwd
사용자 관점이 아닌 특정 디렉토리에서 스냅 샷을 언 타르 팅하고 싶을 수도 있습니다 .
당신이 제거하려면 "최고의 제거`/ '멤버 이름에서"STDERR에 인쇄 된,하지만 여전히 타르 현명 기본적으로처럼 그 선도적 인 슬래시를 떠나고 싶어하고, 나는 훌륭한 솔루션을보고 여기에 주석의 timsoft으로합니다.
해결책은 -C 옵션을 사용하여 디렉토리를 루트 (/)로 변경 한 다음 슬래시 없이 아카이브 할 파일 트리를 지정하는 것입니다. 이제 상대 경로 만 있으면됩니다. 이것은 일반적인 tar create 명령과 같은 작업을 수행하지만 스트리핑이 필요하지 않습니다.
tar fcz bkup.tar.gz -C / home/foo/
tar c -C / home/foo/*
쉘이 변경된 루트에 대해 알지 못하므로 쉘 확장으로 표시된 파일을 tar하려는 경우에도 작동하지 않습니다 (예 :). 그러나 다른 경우에는 여전히 좋은 대답입니다.
-C /
나를 위해 작동하지 않습니다. 그것은 나를 위해 stderr을 막지 않습니다.
한 달 늦었지만 쉘 스크립트에서 내 경우에 가장 적합한 해결책은 부모 디렉토리로 이동하여 명령을 실행하는 것입니다.
cd /var/www/
tar -czf mysite.gz mysite
대신에:
tar -czf /var/www/mysite.gz /var/www/mysite
이것이 무차별 강제 방법을 사용하여 수행 한 방법 2>&1 | grep -v "Removing leading"
입니다.
예를 들면 다음과 같습니다.
tar -cf "$BKUPDIR/${BKUPFILE}.tar" --overwrite --exclude '.*' --one-file-system "$SRCDIR" 2>&1 | grep -v "Removing leading"
tar
명령이 2
치명적인 오류로 반환 될 수 있습니다 .