comment renommer plusieurs files en remplaçant la string dans le nom du file? cette string contient un "#"

https://serverfault.com/questions/70939/how-to-replace-a-text-ssortingng-in-multiple-files-in-linux

https://serverfault.com/questions/228733/how-to-rename-multiple-files-by-replacing-word-in-file-name

https://serverfault.com/questions/212153/replace-ssortingng-in-files-with-certain-file-extension

https://serverfault.com/questions/33158/searching-a-number-of-files-for-a-ssortingng-in-linux

Ces articles mentionnés ont tous répondu à ma question. Cependant, aucun d'eux ne travaille pour moi. Je soupçonne que c'est parce que la string que j'essaie de replace a un # dedans. Existe-t-il un moyen spécial d'y remédier?

J'ai file d'image qui avait un é remplacé par # U00a9 lors d'une migration du site. Ceux-ci ressemblent à ceci:

Lucky-#U00a9NBC-80x60.jpg Lucky-#U00a9NBC-125x125.jpg Lucky-#U00a9NBC-150x150.jpg Lucky-#U00a9NBC-250x250.jpg Lucky-#U00a9NBC-282x232.jpg Lucky-#U00a9NBC-300x150.jpg Lucky-#U00a9NBC-300x200.jpg Lucky-#U00a9NBC-300x250.jpg Lucky-#U00a9NBC-360x240.jpg Lucky-#U00a9NBC-400x250.jpg Lucky-#U00a9NBC-430x270.jpg Lucky-#U00a9NBC-480x240.jpg Lucky-#U00a9NBC-600x240.jpg Lucky-#U00a9NBC-600x250.jpg Lucky-#U00a9NBC.jpg 

et je veux le changer en quelque chose comme ceci:

 Lucky-safeNBC-80x60.jpg Lucky-safeNBC-125x125.jpg Lucky-safeNBC-150x150.jpg Lucky-safeNBC-250x250.jpg Lucky-safeNBC-282x232.jpg Lucky-safeNBC-300x150.jpg Lucky-safeNBC-300x200.jpg Lucky-safeNBC-300x250.jpg Lucky-safeNBC-360x240.jpg Lucky-safeNBC-400x250.jpg Lucky-safeNBC-430x270.jpg Lucky-safeNBC-480x240.jpg Lucky-safeNBC-600x240.jpg Lucky-safeNBC-600x250.jpg Lucky-safeNBC.jpg 

METTRE À JOUR:

Ces exemples commencent par "LU00a9ucky", mais il y a beaucoup d'images avec des noms différents. Je vise simplement la partie "# U00a9" de la string à replace par "safe".

Pour replace # par somethingelse pour les noms de files dans le directory courant (non récursif), vous pouvez utiliser l'utilitaire GNU rename :

 rename 's/#/somethingelse/' * 

Les caractères comme - doivent être échappés avec un \ .

Pour votre cas, vous voudriez utiliser

 rename 's/#U00a9/safe/g' * 

Notez que si vous souhaitez uniquement utiliser une certaine sélection de files, par exemple uniquement *.jpg , ajustez l'input finale pour qu'elle corresponde à cette sélection:

 rename 's/#U00a9/safe/g' *.jpg 

Pour effectuer un test avant de changer de nom de file, utilisez l' -n :

 demo/> ls Lucky-#U00a9NBC-125x125.jpg Lucky-#U00a9NBC-150x150.jpg demo/> rename -n 's/#U00a9/safe/g' *.jpg rename(Lucky-#U00a9NBC-125x125.jpg, Lucky-safeNBC-125x125.jpg) rename(Lucky-#U00a9NBC-150x150.jpg, Lucky-safeNBC-150x150.jpg) 

Pour OS X, le renommage GNU peut être installé en utilisant homebrew : brew install rename .

Ce n'est pas difficile, assurez-vous simplement d'échapper à l'octothorpe (#) dans le nom en ajoutant une barre oblique inverse (\).

 find . -type f -name 'Lucky-*' | while read FILE ; do newfile="$(echo ${FILE} |sed -e 's/\\#U00a9/safe/')" ; mv "${FILE}" "${newfile}" ; done 

find la list des files, puis replace le mot-key. ci-dessous est un exemple

 find . -name '*jpg' -exec bash -c ' mv $0 ${0/\#U00a9NBC/safeNBC}' {} \; 

entrer la description de l'image ici

Pour # sortir du shell, utilisez simplement des guillemets simples ( '#' ), des guillemets ( "#" ) ou des barres obliques inverses ( \# ).

Le plus simple dans votre cas serait d'utiliser la command rename (si elle est disponible):

 rename '#U00a9' safe *.jpg 

Je ne sais pas comment en sed, mais vous pouvez essayer ceci dans un shell bash:

 for f in Lucky-#U00a9NBC-*.jpg; do mv -v "$f" "${f/#U00a9/safe}"; done; 

explication:

  1. boucle à travers tous les noms de files correspondant au glob (Lucky- # U00a9NBC – *. jpg)
  2. Renomme le file en utilisant la command move (mv)
  3. utilise la substitution de paramètre native bash $ {var / Pattern / Replacement} pour créer le nouveau nom ("$ {f / # U00a9 / safe}")

Plus d'informations sur la substitution de parameters (qui est fortement sous-utilisée IMO): http://www.tldp.org/LDP/abs/html/parameter-substitution.html

Une autre option consiste à utiliser pyRenamer , une application spécialement conçue pour le renommage de lots.

Il peut être installé avec sudo apt-get install pyrenamer

Pour plus de détails sur l'utilisation, consultez son file README sur GitHub .