J'ai beaucoup de photos qui doivent être renommées.
[Wedding] Happy Day_001 [February].jpg
[Mountain] Summer Camp_165 [May].jpg
[Beach] Music Fest_58 [August].jpg
J'ai besoin de supprimer tous les crochets. Pour ce faire, j'ai trouvé this & this .
En utilisant la commande sed
comme dans ces pages, l'espace avant et après les crochets est toujours présent. Dans mon cas, je veux que le texte à l'intérieur, l'espace avant et après et les crochets soient supprimés.
Happy Day_001.jpg
Summer Camp_165.jpg
Music Fest_58.jpg
Pour supprimer [first]
& [last]
, comment puis-je faire cela avec une commande sed
?
sed
n'est pas le bon outil. Il ne renomme pas les fichiers. Bien que vous puissiez le coupler avec quelque chose qui peut, il est plus simple d'utiliser rename
de Perl :
rename -n 's/\[.*?\]//g' *
Avec -n
, rename
indiquera les modifications qui seront apportées. Exécuter sans -n
pour renommer les fichiers. rename
est Perl, et en Perl, .*?
n'est pas une correspondance gourmande comme .*
, vous n'avez donc pas besoin d'utiliser des astuces telles que [^]]*
.
Pour supprimer également les espaces blancs environnants:
rename -n 's/\s*\[.*?\]\s*//g' *
Vous ne devriez pas utiliser sed
pour renommer des fichiers, mais vous pouvez utiliser le programme Perl rename
, par exemple:
$ rename -n 's/\[[^]]+\] ([^[]+) \[[^]]+\]/$1/' *
rename([Beach] Music Fest_58 [August].jpg, Music Fest_58.jpg)
rename([Mountain] Summer Camp_165 [May].jpg, Summer Camp_165.jpg)
rename([Wedding] Happy Day_001 [February].jpg, Happy Day_001.jpg)
Supprimez -n
après le test pour renommer les fichiers.
s/old/new
remplace old
par new
\[
littéral [
[^[]+
certains caractères qui ne sont pas [
(stuff)
enregistrer stuff
pour pouvoir le référencer ultérieurement comme $1
, $2
etcCela ne fonctionne que si vos noms de fichiers sont cohérents. réponse de mur est beaucoup plus portable.