为目录中的每个 .fastq 文件生成单独的 .md5 文件?

为目录中的每个 .fastq 文件生成单独的 .md5 文件?

我正在尝试为目录中的每个 .fastq 文件生成单独的 .md5 文件。我找到了为许多文件生成单个 .md5 文件的解决方案,但这不是我想要的。

我有file1.fastq、,file2.fastq并且file3.fastq想要生成file1.md5、、file2.md5file3.md5

我认为 FOR 循环可以解决这个问题,但我不是程序员,似乎找不到解决这个问题的方法。

我也尝试了以下代码:

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

它正确地为每个 .fastq 文件生成一个 .md5 文件,但 .md5 文件内容不正确,即我得到64399513b7d734ca90181b27a62134dc -

代替64399513b7d734ca90181b27a62134dc testfile.fastq

有人可以帮忙吗?

答案1

最简单的情况是:

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

答案2

而且您的md5sum命令不会打印文件名,因为每个文件都是由于重定向而从 shell 读取的<,并且md5sum不可能知道原始文件名,因为它直接输入了文件的内容。

因此,如果您想递归处理当前工作目录中的所有文件,则可以使用此命令:

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

相关内容