2 votes

Comment ajouter une lettre ou un nombre aléatoire au début de chaque nom de fichier ?

Je travaille sur un système dans lequel j'aimerais que la première lettre de chaque nom de fichier soit aléatoire - pas nécessairement unique , juste au hasard. J'aimerais pouvoir lancer cette opération à partir d'une tâche cron.

Par exemple, je pourrais l'orienter vers une liste de fichiers du type

song.mp3    song1.mp3    song2.mp3
song3.mp3   song4.mp3    song5.mp3

Et faites en sorte qu'il change 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

Existe-t-il un moyen de le faire ?

3voto

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.

3voto

sourav c. Points 40637

Voir ce script. J'ai essayé exactement ce que vous vouliez.

#!/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 sélectionnées ?

Ici, j'attrape des cordes de /dev/urandom et en supprimant tous les caractères qui ne sont pas compris entre [a-z] et enfin en ne gardant que la première lettre.

Comment l'utiliser

Copiez le code dans un fichier, par exemple rename_song.sh , donnez-lui la permission d'exécution en utilisant le terminal comme suit,

chmod +x /path/to/rename_song.sh

Copie rename_song.sh dans le répertoire où vous avez .mp3 Exécutez le script à partir du terminal (naviguez d'abord jusqu'au répertoire où vous avez .mp3 ) comme suit,

./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 suit :

a song.mp3    g song1.mp3    k song2.mp3
r song3.mp3   P song4.mp3    A song5.mp3

Si vous voulez des lettres en plus des chiffres, remplacez tr -cd 'a-z' par tr -cd 'a-z0-9' et il est toujours préférable d'utiliser un simple globule Shell au lieu d'analyser la sortie de ls .

1voto

Wilf Points 28034

Voici les versions en une ligne du script de @Joseph pour que vous puissiez le coller dans le terminal :

Commencez par vous rendre dans le répertoire souhaité :

cd /PATH/TO/DIRECTORY/

et vous pouvez ensuite 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

Je me permets également de signaler que, de toute façon, ils ne font que des nombres aléatoires au début.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X