Évadez-vous de l'espace, par ex. Spring\ 2011
, ou utilisez des guillemets, par ex. 'Spring 2011'
. À l'avenir, il est généralement déconseillé d'utiliser des noms de fichiers contenant des espaces sur n'importe quel *NIX.
Si vous avez rename
, vous pouvez utiliser ceci :
rename ' ' '_' [filenames...]
Si votre machine a la commande renommer, cela changera tous les espaces en traits de soulignement dans tous les fichiers/répertoires du répertoire de travail actuel :
rename 's/ /_/g' *
Si vous n'avez pas rename
ou préférez utiliser uniquement le shell :
for f in *\ *; do mv "$f" "${f// /_}"; done
En panne :
*\ *
sélectionne tous les fichiers avec un espace dans leur nom comme entrée pour lefor
boucle. Le motif*X*
sélectionne tous les fichiers avecX
dans leur nom, et pour l'espace de caractère spécial, nous devons l'échapper avec une barre oblique afin que bash ne le traite pas comme séparant différents arguments.- Les guillemets autour de
"$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 àmv
. ${f//str/new_str}
est une fonction de substitution de chaîne spécifique à bash. Toutes les instances destr
sont remplacés parnew_str
.