Comment changer le délimiteur de la sortie de la commande md5sum

Mon code ressemble à ceci:

for i in `find` ; do if [ -f $i ]; then if [ "$i" != "./ex.sh" ]; then md5sum $i >> checksums.txt; fi fi done 

Le problème est que je veux utiliser awk sur le fichier plus tard avec un “|” comme délimiteur. Cependant, je ne sais pas comment append au fichier checksums.txt avec un “|” entre le md5sum et le $ i. Merci

Y compris cette question, j’ai lu au moins 3 questions de votre part concernant le même problème. Je suppose que vous voulez trouver tous les fichiers dupliqués dans un répertoire, non?

alors vous pouvez essayer le liner ci-dessous, cela sauverait votre bouclage plus tard ou double boucle et traitement de awk:

 find {what you want to find comes here} -exec md5sum '{}' \; | sort | uniq -d -w 33 

il listera les md5sum et les noms de fichiers dupliqués.

Si ma supposition était fausse, ignorez simplement ma réponse.

Utilisez ceci:

 md5sum $i | tr -s " " | tr " " "|" >> checksums.txt 

md5sum (au moins la version dans GNU coreutils) ne fournit pas d’options pour contrôler le format de sortie. Vous devez changer votre script awk pour traiter les caractères 0 à 15 comme md5sum et les caractères 18 à la fin de la ligne comme nom de fichier. Si vous avez vraiment besoin du format particulier, vous devriez parsingr la sortie de md5sum . Par exemple:

 user@host:~$ md5sum "/dev/null" | python -c 'import sys; s = sys.stdin.read(); print s[0:32] + "|" + s[34:],' d41d8cd98f00b204e9800998ecf8427e|/dev/null 

En outre, vous devriez inclure l’argument dans md5sum entre guillemets ( md5sum "$i" ). Comme écrit, le script échouera s’il existe des noms de fichiers contenant des espaces ou des caractères spéciaux.