basé sur un modèle, renommer le fichier de commandes au terminal

37

Je dois renommer les éléments suivants:

file_001_loremipsum.png
file_002_dolor.png
file_003_sit.png
file_004_amet.png
file_105_randomness.png

dans

upl_loremipsum.png
upl_dolor.png
upl_sit.png
upl_amet.png
upl_randomness.png

Comment puis-je y arriver avec une simple commande de ligne de terminal?

    
posée Unamata Sanatarai 19.04.2013 - 12:19
la source

3 réponses

60

La solution à l'exemple ci-dessus, en utilisant renommer :

rename -v -n 's/file_\d{1,3}/upl/' file_*.png

Utilisation:

rename [options] [Perl regex search/replace expression] [files]

De man rename :

   -v, --verbose
           Verbose: print names of files successfully renamed.
   -n, --no-act
           No Action: show what files would have been renamed.

renommer PEUT prendre regex comme arguments.

Ce que nous examinons est le contenu entre les guillemets simples ' . Vous pouvez placer les regex séparées par / .

Formule: s/(1)/(2)/(1) = modèle de recherche et (2) = remplacer le motif.

Alors, familiarisez-vous avec les expressions rationnelles et profitez du changement de nom de fichier par lot!

    
réponse donnée Unamata Sanatarai 19.04.2013 - 12:19
la source
5

Cela peut être fait avec peu de magie d’extension du paramètre bash!

for f in file_[0-9]*_*; do mv $f upl_${f#file_[0-9]*_}; done

file_[0-9]*_*; - Le premier motif est utilisé pour parcourir tous les fichiers commençant par 'file_anynumber_'
${f#file_[0-9]*_} - Le deuxième modèle file_[0-9]*_ est utilisé dans l'extension de paramètre, qui demande à bash de supprimer 'file_anynumber_' du fichier. la mendicité de la chaîne.

Pour plus d'informations sur Parameter expansion :

man bash
    
réponse donnée Basharat Sialvi 19.04.2013 - 13:53
la source
4

si les fichiers sont dans plusieurs répertoires, utilisez renommer après une recherche comme:

find -iname file_*.png -type f -exec rename -n 's/file_[0-9]{3}(.*\.png)/upl/' {} \;

le -n après le renommage est à tester, supprimez-le pour continuer! -)

comme ça, vous associez find et rename power.

Personnellement, je l’ai utilisé pour renommer l’en-tête des sources .h en .hpp

find -iname *.h -type f -exec rename 's/(.*\.)h/hpp/' {} \;
    
réponse donnée bcag2 22.09.2016 - 16:09
la source

Lire d'autres questions sur les étiquettes