web-dev-qa-db-fra.com

Comment supprimer les crochets, le texte à l'intérieur et l'espace après / avant les crochets?

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?

6
Hidayats

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' *
7
muru

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.

Remarques

  • 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 etc

Cela ne fonctionne que si vos noms de fichiers sont cohérents. réponse de mur est beaucoup plus portable.

9
Zanna