tar抽出中に自動的にファイルを実行できないようにすることはできますか?

tar抽出中に自動的にファイルを実行できないようにすることはできますか?

いくつかの実行可能ファイルを含むtar.gzアーカイブがあります。アーカイブを抽出するときにアーカイブを自動的に実行不能にする方法はありますか? --modeフラグを使ってみましたが、何の効果もないようです。

tar xzf archive.tar.gz --mode 'a-x'

可能であれば、tar自体を使用して権限を設定したいと思います。これは、tarで作成されたフォルダの名前がどのようになるかを事前に知ることができないためです。 GNU tar機能を使用できます。

ベストアンサー1

使用する場合star(付属ヒリーツール、通過@ヒリー故人)) GNUの代わりに、tar次のことができます。

star xf file.tar -find ! -type d -chmod a-x

同様のインターフェースを使用してfindアーカイブメンバーを操作できます。

libarchiveを使用しbsdtar、アーカイブに次のもの以外は何も含まれていないとします。目次そして定期的なハードリンクの代わりにファイルメタデータの復元を気にせずにzip抽出する前に、アーカイブを動的形式に変換できます(権限はサポートされていません)。

bsdtar --format zip -cf - @file.tar | bsdtar xvf -

これにより、デフォルト権限を持つすべてのファイルが作成され、umaskデフォルト権限も適用されます。したがって、を使用すると、権限のあるディレクトリと存在するディレクトリをumask 022取得します。rwxr-xr-xrw-r--r--

GNUを使用すると、tar同様の結果が得られます。

tar -xf file.tar --to-command='
  set -o noclobber
  mkdir -p -- "$(dirname -- "$TAR_FILENAME")" &&
    cat > "$TAR_FILENAME"'

追加の制限は、その下に通常のファイルがない場合はディレクトリを生成しないため、一部のディレクトリ名が改行文字で終わると失敗することです。

おすすめ記事