tar가 디렉토리 권한을 복원하지 못하는 오류 방지


13

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 접근법을 알고 있습니다.


1
추출과 반대로 타르 생성 시간에이 작업을 수행 할 수있는 방법이 있는지 궁금하십니까?
Roy Truelove

답변:


22

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

1
또한 필자는 마운트 된 Samba 공유에 타르 아카이브를 추출한 사례를 처리했습니다. 명령에서 제안한 것과 달리 대상이 비어있는 경우 오류를 표시하지 않습니다 (즉, 오류를 발생시키는 모든 디렉토리는 tar 자체에 의해 작성 됨). 다시 감사합니다!
user149408 1
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.