複数のサブディレクトリで構成されたディレクトリがあります。各サブディレクトリにはファイルがあり、解凍するtar.gz
と2つのファイルが提供されますR1.fastq
。R2.fastq
tarファイルを解凍してパイピングしてすぐに圧縮し、R1.fastq
各R2.fastq
サブディレクトリの出力を別のSINGLEディレクトリに保存したいと思います。
sourcedir=/sdir
destdir=/ddir
for f in $sourcedir/*; do
fbase=${f##*/}
echo "Inside $fbase"
tar -xvf $f/*.gz |gzip -n9 $f/*.fastq > $destdir/
done
上記のコードを書きましたが、コマンドが実行されるまで保持されますecho
。
答え1
$f/*.fastq
この行が呼び出されると、何も一致しません。しかし、主な問題は、tar
標準出力に抽出せずにファイルを生成することです(パイプのもう一方の端にある「受信」に1つのファイルが終わり、別のファイルが開始されることを知らせる方法が必要ですが、少なくともそうではありません)。いいえ)tar
。
そのため、使用時に必ずtar
ファイルを最初に生成してtar
からgzip
生成されたファイルを生成する必要があります。
ファイルがメモリに収まったら、Pythontarfile
とgzip
モジュールを使用してクイックスクリプトを作成し、圧縮されていないコードがディスクに触れないようにすることができます。 IIRC 個々のファイルは完全に抽出されるため、この操作を実行するにはファイルがメモリーに収まる必要があります。
答え2
一般的なアプローチは、アーカイブからファイル名を読み取り(常に同じでない場合)、tar
一度に1つのファイルのみを抽出することです。 GNUにはファイルの書き込みを防ぐtar
オプションがあります。--to-stdout
それ以外の場合は、ファイル名ごとにFIFOが必要です。
> tar -tf subdir.tar.gz
R1.fastq
R1.fastq
tar -xf subdir.tar.gz --to-stdout R1.fastq | gzip -n9 >/path/to/R1.fastq.gz
tar -xf subdir.tar.gz --to-stdout R2.fastq | gzip -n9 >/path/to/R2.fastq.gz