
いくつかの実行可能ファイルを含む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-x
rw-r--r--
GNUを使用すると、tar
同様の結果が得られます。
tar -xf file.tar --to-command='
set -o noclobber
mkdir -p -- "$(dirname -- "$TAR_FILENAME")" &&
cat > "$TAR_FILENAME"'
追加の制限は、その下に通常のファイルがない場合はディレクトリを生成しないため、一部のディレクトリ名が改行文字で終わると失敗することです。
答え2
抽出時に実行可能ビットが設定されないようにするには、a設定とumask
using引数を組み合わせることができる必要があります。tar
--no-same-permissions