83 votes

Générer un nom de fichier aléatoire dans le shell unix

Je voudrais générer un nom de fichier aléatoire dans un shell unix (disons tcshell). Le nom de fichier doit être composé de 32 lettres hexadécimales aléatoires, par exemple :

c7fdfc8f409c548a10a0a89a791417c5

(à laquelle j'ajouterai ce qui est nécessaire). Le but est de pouvoir le faire uniquement en shell sans avoir recours à un programme.

6voto

LukeN Points 3191

Testé en zsh, devrait fonctionner avec n'importe quel shell compatible BASH !

#!/bin/zsh

SUM=`md5sum <<EOF
$RANDOM
EOF`

FN=`echo $SUM | awk '// { print $1 }'`

echo "Your new filename: $FN"

Ejemplo:

$ zsh ranhash.sh
Your new filename: 2485938240bf200c26bb356bbbb0fa32
$ zsh ranhash.sh
Your new filename: ad25cb21bea35eba879bf3fc12581cc9

4voto

reto Points 4255

Encore une autre façon [tm].

R=$(echo $RANDOM $RANDOM $RANDOM $RANDOM $RANDOM | md5 | cut -c -8)
FILENAME="abcdef-$R"

3voto

Josiah DeWitt Points 703

La première réponse est bonne mais pourquoi fourcher le chat si ce n'est pas nécessaire.

tr -dc 'a-f0-9' < /dev/urandom | head -c32

3voto

srclosson Points 33

Cette réponse est très similaire à fmarks, je ne peux donc pas vraiment m'en attribuer le mérite, mais je trouvais les combinaisons de commandes cat et tr assez lentes, et j'ai trouvé cette version un peu plus rapide. Vous avez besoin de hexdump.

hexdump -e '/1 "%02x"' -n32 < /dev/urandom

2voto

user3174711 Points 1

Une autre chose que vous pouvez ajouter est d'exécuter la commande date comme suit :

date +%S%N

Il lit en un temps de quelques secondes et le résultat ajoute beaucoup d'aléatoire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X