web-dev-qa-db-fra.com

Générer un fichier .md5 distinct pour chaque fichier .fastq dans un répertoire?

J'essaie de générer des fichiers .md5 distincts pour chaque fichier .fastq d'un répertoire. J'ai trouvé des solutions pour générer un seul fichier .md5 pour plusieurs fichiers, mais ce n'est pas ce que je recherche.

J'ai file1.fastq, file2.fastq, file3.fastq et je veux générer file1.md5, file2.md5, file3.md5.

Je suppose qu'une boucle FOR ferait l'affaire mais je ne suis pas un programmeur et ne semble pas pouvoir trouver de solution à ce problème.

J'ai aussi essayé le code suivant:

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

Il génère correctement un fichier .md5 pour chaque fichier .fastq, mais le contenu du fichier .md5 est incorrect, c’est-à-dire que j’obtiens 64399513b7d734ca90181b27a62134dc -

au lieu de 64399513b7d734ca90181b27a62134dc testfile.fastq

Quelqu'un peut-il aider?

2
Chris_bio

Le cas le plus simple est:

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

Cela, cependant, créera des noms de fichiers comme file1.fastq.md5. Les extensions sont fondamentalement sans importance ici, donc ce n'est pas un problème, mais si vous préférez file1.md5 faites ceci à la place:

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

De plus, votre commande md5sum n'imprime pas le nom de fichier car chaque fichier est lu à partir du shell à cause de la redirection <, et md5sum ne peut pas connaître le nom de fichier d'origine, car il est alimenté. le contenu du fichier directement.

Donc, si vous voulez traiter tous les fichiers du répertoire de travail actuel de manière récursive, vous pouvez utiliser cette commande à la place:

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