web-dev-qa-db-fra.com

Basé sur un modèle, renommer le fichier batch dans le terminal

Je dois renommer ce qui suit:

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 seule ligne de commande de terminal?

45
Unamata Sanatarai

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

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

Usage:

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.

Nous examinons le contenu entre les guillemets simples '. Vous pouvez placer les expressions rationnelles séparées par /.

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

Alors, familiarisez-vous avec regex , et profitez du renommage de fichiers batch basé sur un modèle!

75
Unamata Sanatarai

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$1/' {} \;

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

comme cela, vous associez rechercher et renommer le pouvoir.

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/$1hpp/' {} \;
6
bcag2

Cela peut être fait avec un peu de magie de l'expansion des paramètres 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 motif file_[0-9]*_ est utilisé dans l'extension de paramètre pour indiquer à bash de supprimer 'file_anynumber_' du début de la chaîne.

Pour plus d'informations sur Parameter expansion:

man bash
5
Basharat Sialvi