複数のサブディレクトリで解凍してgzip

複数のサブディレクトリで解凍してgzip

複数のサブディレクトリで構成されたディレクトリがあります。各サブディレクトリにはファイルがあり、解凍するtar.gzと2つのファイルが提供されますR1.fastqR2.fastqtarファイルを解凍してパイピングしてすぐに圧縮し、R1.fastqR2.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生成されたファイルを生成する必要があります。

ファイルがメモリに収まったら、Pythontarfilegzipモジュールを使用してクイックスクリプトを作成し、圧縮されていないコードがディスクに触れないようにすることができます。 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

関連情報