我正在尝试为目录中的每个 .fastq 文件生成单独的 .md5 文件。我找到了为许多文件生成单个 .md5 文件的解决方案,但这不是我想要的。
我有file1.fastq
、,file2.fastq
并且file3.fastq
想要生成file1.md5
、、file2.md5
。file3.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" \;