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アーカイブに入れる必要があります。

関連情報