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?
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
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" \;