printf "%s\n" "${0##*/}"
${0##*/}
prend le chemin $0
et des bandes hors des noms de répertoires de premier plan, ne laissant que le nom du fichier. La commande printf ajoute une nouvelle ligne à la fin et ce nom de fichier est canalisé vers ...
| sha1sum | cut -d" " -f1
Ce calcule le hachage SHA-1 du nom de fichier et utilise ensuite cut
pour extraire tout le hachage de la sortie de sha1sum .
${0%/*}
C'est à l'opposé de ${0##*/}
— celui-ci obtient les répertoires de $0
et jette le nom du fichier.
efficacement, ce qui finit par obtenir l'exécution est:
mv "$DIR/$FILENAME" "$DIR/$HASH_OF_FILENAME"
En anglais, il renomme tous les fichiers qu'il trouve le hachage SHA-1 du nom de fichier d'origine.
Pour ce que cela vaut, il pourrait être simplifié un peu et rendu plus lisible. Je pourrais écrire la commande mv comme:
mv "$0" "$(dirname "$0")/$(basename "$0" | sha1sum | awk "{print \$1}")