web-dev-qa-db-fra.com

Comment puis-je ajouter une lettre / un nombre aléatoire au début de chaque nom de fichier?

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?

1
Undo

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.

3
souravc

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.

3
Joseph Santaniello

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.

1
Wilf