Tar를 사용하여 특정 파일만 제공될 때 상위 폴더의 권한을 유지하는 방법은 무엇입니까?

Tar를 사용하여 특정 파일만 제공될 때 상위 폴더의 권한을 유지하는 방법은 무엇입니까?

멋진 권한이 있는 폴더가 있다고 가정해 보겠습니다.

mkdir abc
mkdir abc/def
chmod 777 abc

이제 백업을 생성하고 싶습니다.

tar -cpzvf test.tar.gz abc/def/

이제 abc/를 삭제하고 아카이브에서 복원해 보겠습니다.

rm -rf abc/
tar -xpzvf test.tar.gz

abc/더 이상 원래 권한이 없습니다.

find abc -printf "%m:%f\n"
755:abc

abc/(abc/def/ 대신)를 매개변수로 제공하여 tar 파일을 생성하면 두 폴더의 권한이 훌륭하게 복원된다는 것을 알고 있습니다. 하지만 제 경우에는 abc/def/를 매개변수로 명시적으로 제공해야 합니다. 동일한 결과를 얻을 수 있는 방법이 있습니까?

답변1

@schily의 좋은 답변에 대한 후속 조치를 취하려면 해당 이외의 하위 디렉터리를 추가하지 않고 최상위 디렉터리를 abc아카이브에 추가하려면 defGNU를 사용하여 tar다음을 수행할 수 있습니다.

tar -zcf file.tgz --no-recursion abc --recursion abc/def

libarchive 를 사용 bsdtar하거나 언제든지 필요한 파일의 정확한 목록 생성 pax으로 되돌릴 수 있습니다 .find

(printf 'abc\0'; find abc/def -print0) | bsdtar -zcnf file.tgz --null -T -

답변2

umask가 적용되었습니다. 노력하다:

마스크 000; tar -xpzvf test.tar.gz

답변3

문제는 디렉터리가 abc아카이브에 없으므로 아카이브에서 복원할 수 없다는 것입니다.

필수이지만 누락되었으므로 tar자격 증명에 따라 기본 권한을 사용하여 생성하세요.

권한도 복원하려면 해당 권한 abc을 아카이브에 넣어야 합니다.

관련 정보