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?
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?
Vous ne devriez pas utiliser rename
pour 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 \a
pour '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.txt
sous 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 mv
attend:
["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.
rename
est 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".
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:
la source
A=bla ; mv "$A $A .txt" blabla.txt
déplacera bla bla .txt, maisA=bla ; mv '$A $A .txt' blabla.txt
recherchera un fichier nommé "$ A $ A .txt". L'un ou l'autre fonctionnera cependant pour votre exemple.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:
la source