ファイルがいくつかありますtar.gz
。tar.gz
このファイルを2つのUSBハードドライブに解凍する必要があります。このコマンドを使用すると、tar -xvzf
一度に1つのハードドライブにのみ抽出できます。tar.gz
tar.gz
同時に、両方のハードドライブにファイルを抽出する方法を提案していただきありがとうございます。移行する必要があるファイルの合計サイズは約4.5 TBなので、時間を節約するのに役立ちます。
答え1
ファイルディスクリプタを複数回リダイレクトするときは、プロセス置換とzsh
同様の動作と組み合わせて使用してください。tee
zcat file.tar.gz > >(cd /media/disk1 && tar xf -) > >(cd /media/disk2 && tar xf -)
プロセス交換をサポートするその他のシェル(ksh、bash)の場合:
{
zcat file.tar.gz 4>&- |
tee >({ cd /media/disk1 && tar xf -; } >&4 4>&-) |
{ cd /media/disk2 && tar xf -; } 4>&-
} 4>&1
以下を備えたシステムのPOSIXly /dev/fd/x
:
zcat file.tar.gz | {
{
tee /dev/fd/3 |
{ cd /media/disk1 && tar xf -; } 3>&-
} 3>&1 >&4 4>&- |
{ cd /media/disk2 && tar xf -; } 4>&-
} 4>&1
複数のファイルに対して操作を実行するにはtar.gz
(これはまだzsh
)
for f (*.tar.gz) zcat -- $f > >(cd /media/disk1 && tar xf -) > >(cd /media/disk2 && tar xf -)
ファイルは、最も遅いターゲットドライブの速度で抽出されます。
別のアプローチは、2つのドライブの抽出を並列に実行することです(sh
ここではPOSIX構文を使用)。
for f in *.tar.gz; do zcat -- $f | (cd /media/disk1 && tar xf -); done &
for f in *.tar.gz; do zcat -- $f | (cd /media/disk2 && tar xf -); done
wait
しかし、注意してください:
- これは、各ファイルの圧縮を2回解放して、より多くのCPUリソースを使用することを意味します。
- あるターゲットドライブが別のドライブよりもはるかに遅い場合、一部の
tar.gz
ファイルは最終的にキャッシュから削除され、コンピュータにさらにI / Oが発生するため、ソースディスクから2回読み取られる可能性があります。
答え2
これを使用zcat
して抽出し、2つの異なるファイルにフォークしてから、両方のファイルstdout
にフォークできます。tee
tar
zcat bigfile.tar.gz | tee >(tar -xC /path/to/first/) | tar -xC path/to/second
大容量ファイルを「最初」と「2番目」のパスに抽出します。
次のようにすることもできますgunzip -c
。
gunzip -c bigfile.tar.gz | tee >(tar -xC /path/to/first/) | tar -xC path/to/second