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}' {} \;
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:
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 .