web-dev-qa-db-ja.com

ディレクトリ内の各.fastqファイルに対して個別の.md5ファイルを生成しますか?

ディレクトリ内の各.fastqファイルに対して個別の.md5ファイルを生成しようとしています。多くのファイルに対して単一の.md5ファイルを生成するソリューションを見つけましたが、これは私が探しているものではありません。

file1.fastqfile2.fastqfile3.fastqがあり、file1.md5file2.md5file3.md5を生成したい。

FORループでうまくいくと思いますが、私はプログラマーではなく、この問題の解決策を見つけられないようです。

また、次のコードも試しました。

find . -type f -name "*.fastq.gz" -exec sh -c "md5sum < {} > {}.md5" \;

各.fastqファイルに対して.md5ファイルが正しく生成されますが、.md5ファイルの内容は正しくありません。つまり、64399513b7d734ca90181b27a62134dc -が返されます

64399513b7d734ca90181b27a62134dc testfile.fastqの代わりに

誰でも助けることができますか?

2
Chris_bio

最も単純なケースは次のとおりです。

for file in *fastq; do md5sum "$file" > "$file".md5; done

ただし、それはfile1.fastq.md5のようなファイル名を作成します。拡張機能はここでは基本的に無関係なので、それは問題ではありませんが、file1.md5を希望する場合は代わりにこれを実行してください。

for file in *fastq; do md5sum "$file" > "${file//.fastq}".md5; done
5
terdon

また、md5sumコマンドはファイル名を出力しません。これは、各ファイルが<リダイレクトのためにシェルから読み取られ、md5sumが元のファイル名を認識できないためです。ファイルのコンテンツを直接。

したがって、現在の作業ディレクトリ内のすべてのファイルを再帰的に処理する場合は、代わりに次のコマンドを使用できます。

find . -type f -name "*.fastq.gz" -exec sh -c "md5sum {} > {}.md5" \;
3
kos