Si vous devez également renommer des fichiers de sous-répertoires et si votre find
prédécesseur est pris en charge -execdir
, vous pouvez le faire.
find /search/path -depth -name '* *' \
-execdir bash -c 'mv -- "$1" "${1// /_}"' bash {} \;
Merci à @glenn jackman pour avoir suggéré une -depth
option find
et pour me faire réfléchir.
Notez que sur certains systèmes (y compris ceux de GNU / Linux), il find
peut arriver que les fichiers dont le nom contient des espaces ainsi que des séquences d'octets ne formant pas des caractères valides ne soient pas détectés différent de la locale). Définir les paramètres régionaux sur C
(comme dans LC_ALL=C find...
) résoudrait le problème.
find -maxdepth 1
pour faire exactement ce que le PO vous a demandé sur le fonctionnement du dossier actuel.-depth
option find et vous pourrez vous en débarrassersort
.-name '* *'
de-name '*_*'
et le changement"${1// /_}"
à"${1//_/.}"
bash
la page de manuel de.Dans n'importe quel shell, vous pouvez parcourir les fichiers dont le nom contient un espace. Remplacer les espaces par des traits de soulignement est facile dans bash, ksh et zsh avec la
${VARIABLE//PATTERN/REPLACEMENT}
construction.Sur Debian, Ubuntu et ses dérivés, vous pouvez utiliser Perl
rename
(les autres distributions livrent un programme différent en tant querename
, et ce programme n’est pas utile ici).Une solution zsh obligatoire:
Une solution POSIX obligatoire:
la source
s/…/…/g
signifie remplacer toutes les occurrences. Ce n'est pas très bien expliqué dans le manuel . Si vous souhaitez renommer des répertoires, vous pouvez le rechercher (je pense l'avoir déjà vu auparavant) et, si vous ne le trouvez pas, posez une nouvelle question._MG_blah.JPG
àIMG_blah.JPG
.Vous pouvez utiliser
rename
pour cela (en supposant ici celui deutil-linux
, pasperl
celui):Cela trouvera tous les espaces et répertoires dans le nom et remplacera l’espace par un trait de soulignement. Comme il utilise la correspondance de fichier glob, vous devez être dans le bon répertoire pour commencer.
Si vous voulez faire des correspondances récursives, vous pouvez, mais vous devrez peut-être exécuter
rename
plusieurs fois pour attraper tous les éléments des répertoires qui ont eux-mêmes été renommés:la source
rename
Renommera les fichiers spécifiés en remplaçant le première apparition de partir en leur nom par la . » Donc , cela ne fonctionnera que pour les fichiers avec un seul espace dans leur nom. (Vous pouvez appelerrename
en boucle, mais ce n'est pas vraiment le bon outil ici.)Une autre option serait
mmv
, si installé.la source
_
, cela ne fonctionne pas avec les noms comportant plusieurs espaces.Sur Debian / Ubuntu, en s’appuyant sur les réponses de Caleb et Gilles, c’est ce qui a fonctionné pour moi pour renommer les fichiers de manière récursive:
Remarque: pour prévisualiser quels fichiers seront renommés et comment, utilisez le
-n
commutateur avecrename
:Autre remarque: ce paramètre
globstar
permet de faire**
correspondre les fichiers de tous les sous-répertoires. Par conséquent, si vous souhaitez uniquement utiliser le répertoire actuel, ne définissez pas globstar ni utilisez-le à la*
place de**
.Remarque supplémentaire: la
rename
commande doit être exécutée plusieurs fois pour les fichiers contenant plusieurs occurrences du terme recherché.la source
a b/c d
àa_b/c_d
ne travaillerait, vous aurez besoin d' abord renommera b/c d
àa b/c_d
, puisa b
àa_b
).rename
commande deux fois?**
exclut les fichiers de points et traverse les liens symboliques.Si vous n’êtes pas un flash dans les expressions régulières (ce n’est pas le cas!) Et que vous pouvez exécuter des applications conçues pour kde (que vous utilisiez kde-k desktop ou que vous ayez ses bibliothèques installées), alors krename est un excellent utilitaire graphique vous permet de voir l'avant et l'après avant de vous engager dans les modifications. Il comporte un certain nombre de transformations simples en tant qu'options et prend également en charge les expressions régulières. Vous pouvez même combiner plusieurs transformations séquentielles en un seul renommage afin de ne pas avoir à concevoir une seule transformation complexe qui le fasse tous en même temps. Il a également une option pour continuer à renommer les mêmes fichiers après qu’un changement de nom ait été appliqué.
Je ne l'utilise pas souvent, mais quand je l'utilise, le travail est fait rapidement et facilement. Il est très pratique lorsque vous renommez divers fichiers multimédias téléchargés afin que vous puissiez les gérer de manière uniforme sur votre système. Il est utile de télécharger le manuel de krename séparément afin que vous puissiez vous y reporter lorsque vous utilisez le programme.
http://www.krename.net/
la source