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.