tar가 디렉토리 권한을 복원하지 못하는 오류 방지 관련된 모든

tar 1.26 및 1.27.1 모두에서 다음 동작을 관찰합니다.

$ mkdir a b a/diffowner
$ sudo mkdir b/diffowner
$ sudo chmod a+w b/diffowner
$ echo foo > a/diffowner/foo
$ tar -C a -cvf test.tar diffowner
diffowner/
diffowner/foo
$ tar -C b -xvf test.tar diffowner
diffowner/
diffowner/foo
tar: diffowner: Cannot utime: Operation not permitted
tar: diffowner: Cannot change mode to rwxr-xr-x: Operation not permitted
tar: Exiting with failure status due to previous errors

그래서 내가 여기서하려고하는 것은 tar 파일을 기존 디렉토리 구조로 추출하는 것입니다. 여기에서 관련된 모든 디렉토리의 소유자는 아니지만 모든 디렉토리에 대한 쓰기 권한이 있습니다. 실제로 이들은 그룹간에 공유됩니다.

타임 스탬프에 신경 쓰지 않으며 권한이 이미 정확해야한다고 믿습니다. 나는 이것을 일반 사용자로 실행하고 --preserve-permissions있으므로 그렇게하지 않으면 시도 하지 않아야합니다. 실제로 걱정되는 것은 종료 상태입니다. 스크립트에서 이것을 사용하고 실제 추출이 제대로 작동했는지 알고 싶습니다.

디렉토리 권한을 설정 하지 않도록 지시하는 tar 옵션이 즉시 또는 지연되지 않습니까? 실패하면 다른 솔루션을 제안 할 것입니다. 지금은 임시 디렉토리로 추출 rsync하고 기존 트리로 물건을 옮기는 데 사용 하려고합니다. 그러나 아마도 당신은 덜 hackish 접근법을 알고 있습니다.



답변

tar옵션은 당신이 찾고있는 것일 수 있습니다.

 --no-overwrite-dir
       preserve metadata of existing directories

나는 다음과 같이 테스트했다.

$ mkdir a b a/diffowner
$ sudo mkdir b/diffowner
$ sudo chmod a+w b/diffowner
$ echo foo > a/diffowner/foo
$ tar -C a -cvf test.tar diffowner
diffowner/
diffowner/foo
$ tar -C b --no-overwrite-dir -xvf test.tar diffowner
diffowner/
diffowner/foo
$ echo $?
0