Comment remplacer les espaces blancs dans un nom de fichier?

8

je l'ai essayé de la manière suivante:

rename 'bla bla .txt' blabla.txt

Mais cela ne fonctionne pas, quelle est la syntaxe correcte pour ce cas?

NDA
la source

Réponses:

15

Vous ne devriez pas utiliser renamepour renommer un seul fichier, utilisez plutôt mv(1) .

De plus, pour échapper à whitepsace, préfixez-le avec un \:

"Ubuntu One"Ubuntu\ One

Votre commande serait

mv bla\ bla.txt blabla.txt
  • la barre oblique inverse indique à bash que le caractère suivant est en quelque sorte spécial, par exemple \apour 'bell', \pour un espace littéral, etc.

    voir man ascii(7) pour plus

Alternativement, puisque vous utilisez maintenant la commande correcte mv, vous pouvez citer le nom de fichier s'il y a beaucoup d'espaces:

mv "bla    bla.txt" blabla.txt

(Ce serait bla\ \ \ \ bla.txtsous forme d'échappement)

  • En bash, les chaînes entre guillemets (guillemets simples ou doubles) sont traitées comme un seul argument, tandis que les chaînes sans guillemets seront divisées en plusieurs arguments, comme ceci:

    • ["mv", "bla", "bla.txt", "blabla.txt", ]

    et mvattend:

    • ["mv", "source", "destination", ]
  • Remarque: en tapant 'mv' et les premiers caractères du nom de fichier et en appuyant sur TAB, vous obtiendrez la version échappée du nom de fichier, ce qui rendra le changement de nom rapide et facile.


renameest utilisé pour traiter par lots le renommage de fichiers à l'aide d'une expression régulière, comme le montre l'exemple de sa page de manuel :

rename 's/\.bak$//' *.bak

Pour supprimer toute occurrence de .bak (à la fin de la chaîne [$]) de tous les fichiers correspondant à "* .bak".

Stefano Palazzo
la source
merci, à quoi ressemblerait la commande s'il y a beaucoup d'espaces dans le nom du fichier d'origine? existe-t-il une expression régulière simple pour qu'il n'y ait pas besoin d'échapper à chaque espace blanc?
NES
Mise à jour de la réponse pour répondre à de nombreux espaces et guillemets simples.
Stefano Palazzo
Il y a une différence entre les guillemets simples et doubles, mais ce n'est pas un problème pour ce problème. Voir cet article pour les détails exacts
Stefano Palazzo
4

rename est une commande spécialisée pour le renommage en masse. De manière non intuitive, ce que nous appelons normalement "renommer" est en fait un "déplacement" vers un nouveau nom:

mv 'bla bla .txt' blabla.txt
ændrük
la source
Quelle est la différence entre écrire le nom de fichier entre guillemets simples et entre guillemets doubles?
NES
4
Les guillemets doubles permettent d'étendre les variables et de les remplacer par des processus; les guillemets simples ne le font pas. A=bla ; mv "$A $A .txt" blabla.txtdéplacera bla bla .txt, mais A=bla ; mv '$A $A .txt' blabla.txtrecherchera un fichier nommé "$ A $ A .txt". L'un ou l'autre fonctionnera cependant pour votre exemple.
frabjous
1
rename "s/\s//g" "bla bla.txt"

s est la commande sed Substitute.

\ s est pour whiteSpace

Vous remplacez par rien. Sinon, la chaîne de remplacement va après la deuxième barre oblique.

g est pour Global, c'est-à-dire remplacer chaque instance. L'omission de g ne remplace que la première instance.


Cette commande remplacera les espaces par un trait de soulignement dans tous les fichiers:

rename "s/\s/_/g" *
Nissim Nanach
la source