Je travaille sur un système où j'aimerais que la première lettre de chaque nom de fichier soit aléatoire - pas nécessairement nique, juste aléatoire. J'aimerais pouvoir exécuter cela à partir d'un travail cron.
Par exemple, je serais en mesure de pointer vers une liste de fichiers comme
song.mp3 song1.mp3 song2.mp3
song3.mp3 song4.mp3 song5.mp3
Et demandez-lui de changer les noms des fichiers en quelque chose comme ceci:
a song.mp3 g song1.mp3 k song2.mp3
r song3.mp3 l song4.mp3 e song5.mp3
Y a-t-il un moyen de faire cela?
Voir ce script. J'ai essayé exactement ce que tu voulais.
#!/bin/bash
for item in *.mp3
do
mv "$item" "$(cat /dev/urandom | tr -cd 'a-z' | head -c 1) $item"
done
Comment les lettres aléatoires sont-elles ramassées
Ici, je prends des chaînes de /dev/urandom
et en supprimant tous les caractères qui ne sont pas entre [a-z] et en ne gardant finalement que la première lettre.
Comment utiliser
Copiez le code dans un fichier, dites rename_song.sh
, donnez-lui l'autorisation d'exécution en utilisant le terminal comme suit,
chmod +x /path/to/rename_song.sh
Copie rename_song.sh
vers le répertoire où vous avez .mp3
des dossiers. exécutez le script à partir du terminal (accédez d'abord au répertoire où vous avez .mp3
fichiers) comme,
./rename_song.sh
Si vous avez une liste de fichiers comme
song.mp3 song1.mp3 song2.mp3
song3.mp3 song4.mp3 song5.mp3
Ils seront renommés comme ceci:
a song.mp3 g song1.mp3 k song2.mp3
r song3.mp3 P song4.mp3 A song5.mp3
Si vous voulez une lettre ainsi qu'un chiffre, remplacez tr -cd 'a-z'
par tr -cd 'a-z0-9'
, et il est toujours préférable d'utiliser un glob simple Shell au lieu d'analyser la sortie de ls
.
Vous pouvez utiliser la variable env $ RANDOM:
#!/bin/bash
for F in *.mp3 ; do
mv $F $RANDOM.$F
done
Qui déplacera les fichiers:
songa.mp3
song7.mp3
à
1875.songa.mp3
32654.song7.mp3
par exemple.
Voici les versions à une ligne du script de @ Joseph afin que vous puissiez le coller dans le terminal:
Passez d'abord au répertoire souhaité:
cd /PATH/TO/DIRECTORY/
puis vous pouvez exécuter la commande directement depuis le terminal:
for F in $(ls *.mp3); do mv "$F" "$RANDOM.$F" ; done;
et une version plus courte serait:
for F in *.mp3 ; do mv "$F" "$RANDOM.$F" ; done
Puis-je également noter que ceux-ci ne feront de toute façon que des nombres aléatoires au début.