
tar
一度に複数のファイルを抽出するように言うことができるかどうか疑問に思います。
私は長年の経験を持つUnixユーザーです。もちろん、抽出したいアーカイブごとに、for
またはfind
同様のものを一度呼び出すことができますが、結果が有効なコマンドラインを思い出すことはできません。tar
私のtar
1回の抽出には2つの.tar.gzファイルがあります。 (いいえ、問題ありませんfor
。ただそれなしでできるかどうかを尋ねるだけです。)
気になってこんな質問をしたかもしれませんが、
tar
これをサポートする奇妙なポイントがあります- 私が試したときに提案された
-M
パラメータを使用する方法を知っている人はいますか?tar
tar -zxv -f a.tgz -f b.tgz
- 私たちは両方とも視覚障害者であり、これは完全に簡単です。ただし、オンラインで使用していないか、類似のヒントが見つかり
for
ませfind
んxargs
。
返信しないでくださいtar -zxvf *.tar.gz
(これを行うといいえうまくいきます)そして完全に自信がある場合にのみ「動作しません」と答えてください(おそらく良い説明があります)。なぜ、また)。
編集する:私は指摘されましたスタックオーバーフローに関するこの質問への回答現在の構文に違反しないと、これは不可能であることが非常に詳細に指定されていますが、tar
私はこれが本当だとは思わない。 IMHO、既存の構文を使用または中断しませんtar -zxv -f a.tgz -f b.tgz
。tar -zxv --all-args-are-archives *.tar.gz
答え1
これは可能です。構文はとても簡単です。
$ cat *.tar | tar -xvf - -i
-iオプションは、マニュアルページのtarアーカイブの末尾にあるEOFを無視します。
-i, --ignore-zeros
ignore blocks of zeros in archive (normally mean EOF)
答え2
のための*.tar.gz:
for file in *.tar.gz; do tar -zxf "$file"; done
のための*.tar.bz2:
for file in *.tar.bz2; do tar -jxf "$file"; done
のための*.tar.xz:
for file in *.tar.xz; do tar -Jxf "$file"; done
のための*.tar.zst 新しい:
for file in *.tar.zst; do tar --zstf -xf "$file"; done
答え3
ループを使用する必要があります。tar
複数のオプションを許可するためにコマンドライン構文を壊すことはありませんが、さまざま-f
なエッジ条件で複数のアーカイブを順番に処理するためのコードを追加する必要があります(間にあるアーカイブの形式が正しくない場合はどうなりますか? ?))圧縮メカニズム?-C
複数のオプションもありますか(特定のディレクトリに抽出するためのGNU tarオプション)? -K(メンバー名で始まるGNU tarオプションの場合)はどうですか?
ループを回避する1つの方法for
は、インストールして有効にすることです。AVFS、ㅏヒューズアーカイブへの透過的なアクセスを提供するファイルシステム。各アーカイブは/path/to/archive
ディレクトリとしても使用されます~/.avfs/path/to/archive#
。ワイルドカードを使用してアーカイブを一致させる場合は、#
それをワイルドカード一致に追加するのに障害があります。これはzshで行うことができます。
mountavfs
cp -p ~/.avfs$PWD/{a,b}.tgz\#/* /destination
cp -p ~/.avfs/path/to/source/*.tgz(e\''REPLY=$REPLY\#'\')/* /destination