2

Perl のArchive::Tarモジュールを使用しています。ファイルのアクセス許可は保持されますが、スティッキー ビットは保持されません。アーカイブを抽出するもう一方の端では、すべてのスティッキー ビットがなくなっています。UNIX/LINUX オペレーティング システムは、これらのスティッキー ビットを別の場所に格納していると思います。アーカイブにスティッキー ビットも保持させるにはどうすればよいですか?

tar に -p スイッチを使用すると保存されますが、 Archive::Tarを使用して保存するにはどうすればよいですか? 両側で Perl のモジュールを使用しています。

4

3 に答える 3

4

Fine Source によると、Archive::Tar::File はモードから上位ビットを取り除きます。スクリプトの最初 (アーカイブ::Tar を参照する前) で次の魔法の呪文を試して、それがそれを覆すかどうかを確認できます。

use Archive::Tar::Constant ();
BEGIN {
    local $SIG{__WARN__} = sub{};
    *Archive::Tar::Constant::STRIP_MODE = sub(){ sub {shift} };
}
...
use Archive::Tar;
...

簡単な説明: STRIP_MODE は、raw モードを渡すことができるサブルーチンを含む定数であり、保存する必要があるモードを返します。通常は

sub { shift() & 0777 }

これは定数であるため、Archive::Tar::Constant から Archive::Tar::File にインポートされ、そこで使用されます。設定されているものは何でも、コンパイル時に Archive::Tar::File にインライン化されます。したがって、これを変更するには、定数をインライン化する前、つまり Archive::Tar::File をロードする前に変更する必要があります。

注: インライン化可能な定数を変更するとエラーが発生しやすいため (影響が出るには遅すぎて変更すると)、通常は通常の方法では無効にできない重大な警告が生成されます。

于 2009-02-24T08:40:35.357 に答える
0

わかりませんが、公式のtarコマンドでは、これを実現するために-pを渡す必要があります

于 2009-02-24T06:25:55.697 に答える
-1

詳細については、Archive::Tarのドキュメントを参照してください。一見すると、

$Archive::Tar::CHMOD = 1;

上記の設定がデフォルトであるとドキュメントに記載されていますが、必要な処理を実行する必要があります。Archive :: Tarは、スティッキービットのような高次モードのビットを取り除きます。

アーカイブはArchive::Tarで作成および抽出されていますか、それとも一方の端で標準のtarプログラムを使用していますか?

于 2009-02-24T07:06:01.123 に答える