Gerar um arquivo .md5 separado para cada arquivo .fastq em um diretório?

2

Estou tentando gerar arquivos .md5 separados para cada arquivo .fastq em um diretório. Eu encontrei soluções para gerar um único arquivo .md5 para muitos arquivos, mas isso não é o que estou procurando.

Eu tenho file1.fastq , file2.fastq , file3.fastq e desejo gerar file1.md5 , file2.md5 , file3.md5 .

Eu suponho que um loop FOR faria o truque, mas eu não sou um programador e não consigo encontrar uma solução para este problema.

Eu também tentei o seguinte código:

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

Ele gera corretamente um arquivo .md5 para cada arquivo .fastq, mas o conteúdo do arquivo .md5 está incorreto, ou seja, eu recebo 64399513b7d734ca90181b27a62134dc -

em vez de 64399513b7d734ca90181b27a62134dc testfile.fastq

Alguém pode ajudar?

    
por Chris_bio 29.01.2016 / 11:50

2 respostas

5

O caso mais simples é:

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

Isso, no entanto, criará nomes de arquivos como file1.fastq.md5 . As extensões são basicamente irrelevantes aqui, então isso não é um problema, mas se você preferir file1.md5 , faça isso:

for file in *fastq; do md5sum "$file" > "${file//.fastq}".md5; done
    
por terdon 29.01.2016 / 12:02
3

Além disso, o comando md5sum não imprime o nome do arquivo porque cada arquivo é lido a partir do shell devido ao redirecionamento < , e md5sum não pode saber o nome do arquivo original, pois ele alimentou o conteúdo do arquivo diretamente.

Então, se você quiser processar todos os arquivos no diretório de trabalho atual recursivamente, você pode usar este comando:

find . -type f -name "*.fastq.gz" -exec sh -c "md5sum {} > {}.md5" \;
    
por kos 29.01.2016 / 12:07