web-dev-qa-db-ja.com

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そう言わない限り、私はしませんでした。本当に心配なのは終了ステータスです。これをスクリプトで使用するつもりで、実際の抽出がうまく機能したかどうかを知りたいのです。

notを指示するtarのオプションはありませんか?それができない場合、他にどのような解決策を提案しますか。現在、一時ディレクトリに抽出し、rsyncを使用して既存のツリーにコンテンツを移動することを考えています。しかし、おそらくハックの少ないアプローチを知っています。

13
MvG

この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
22
terdon