tar.gz
ファイル。これらを抽出する必要がありますtar.gz
ファイルを2つのUSBハードディスクに。コマンドtar -xvzf
抽出できるのはtar.gz
一度に1つのハードディスクに。
tar.gz
ファイルを2つのハードディスクに同時に保存します。移行する必要のあるファイルの合計サイズは約4.5TBであるため、これにより時間を大幅に節約できます。
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 -)
ファイルは、最も遅い宛先ドライブの速度で抽出されることに注意してください。
別のアプローチは、両方のドライブの抽出を並行して実行することです(ここではPOSIX sh
構文を使用しています)。
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
ただし、次のことに注意してください。
tar.gz
ファイルがソースディスクから2回読み取られる可能性があります。これは、ファイルがキャッシュから追い出され、マシンのI/Oが増える可能性があるためです。zcat
を使用してstdout
に抽出し、次にtee
を使用して2つの異なるファイルに分岐し、次にtar
でそれらを抽出できます。
zcat bigfile.tar.gz | tee >(tar -xC /path/to/first/) | tar -xC path/to/second
ビッグファイルを「第1」および「第2」のパスに抽出します。
gunzip -c
も:
gunzip -c bigfile.tar.gz | tee >(tar -xC /path/to/first/) | tar -xC path/to/second