J'ai nommé un certain nombre de fichiers contenant des espaces et je souhaite remplacer l'espace par _
. Cependant, chaque fois que j'écris une commande dans le shell avec le nom de fichier (par exemple Spring 2011
), le shell ne reconnaît pas le fichier ou le répertoire.
Que puis-je faire à ce sujet? Existe-t-il un moyen d'utiliser le caractère unicode pour un espace?
bash
boucle for: voir ma solution ici .Réponses:
Échapper à l'espace, par exemple
Spring\ 2011
, ou utiliser des guillemets, par exemple'Spring 2011'
. À l'avenir, c'est généralement une mauvaise idée d'utiliser des noms de fichiers avec des espaces sur n'importe quel * NIX.Si vous en avez
rename
, vous pouvez utiliser ceci:la source
rename
version 2.23)Si votre machine a la commande rename , cela changera tous les espaces en soulignés dans tous les fichiers / répertoires du répertoire de travail actuel:
la source
rename --version
rename from util-linux 2.23.2
.-bash: /usr/bin/rename: Argument list too long
Si vous n'avez pas
rename
ou préférez utiliser uniquement le shell:En panne:
*\ *
sélectionne tous les fichiers avec un espace dans leur nom comme entrée pour lafor
boucle."$f"
sont importants car nous savons qu'il y a un espace dans le nom de fichier et sinon il apparaîtrait comme 2+ arguments pourmv
.${f//str/new_str}
est une fonction de substitution de chaîne spécifique à bash. Toutes les instances destr
sont remplacées parnew_str
.la source
for f in *\ *; do mv "$f" "${f// /_}"; done
ça marchemv "Spring 2011.file" Spring_2011.file
devrait indiquer à la ligne de commande de prendre la chaîne entre guillemets comme une seule entrée.la source
Pour renommer par programme N fichiers, vous pouvez utiliser une
bash
boucle for simple .Si vous avez moins de 5 noms de fichiers, vous pouvez saisir manuellement tous les noms de fichiers et utiliser la
rename
commande comme le suggère la solution ci-dessus . Mais pour moi ... je préfère la solution programmatique ... même quand il n'y a que 4 fichiers.ps
si vous n'êtes pas familier avec
Bash
l'extension des paramètres (c'est-à-dire${filename// /_}
), vous pouvez utiliser larename
commande:la source