Donnez à tous les fichiers une extension .jpg


8

J'ai un répertoire et certaines extensions des fichiers sont en majuscules (.JPG) au lieu de minuscules.

Je veux m'assurer que chaque fichier a l'extension .jpg. Comment pourrais-je faire cela à partir d'une invite du shell?


C'est dommage que Linux ne dispose pas d'AppleScript.
— gadgetmo

2
C'est tellement génial que Linux n'a pas d'AppleScript.
— math

Réponses:


15

Utilisation de l' extension des paramètres du shell :

for f in *.JPG; do
    mv "${f}" "${f%%.JPG}.jpg"
done

Les "personnages prendront soin des noms de fichiers contenant des espaces, comme le font souvent les photographies.


5
+1 Cette solution fonctionne même si vous avez des espaces dans le nom de fichier, mais vous voulez dire "$ f" au lieu de "f".
— Adam Zalcman

L'expansion des paramètres de Shell est un peu cryptique, on pourrait utiliser le nom de base à la place: pour f dans * .JPG; do mv "$ f" "` basename $ f .JPG`.jpg "; fait
— math

@math: Je préfère ma version car elle fonctionne avec des noms de fichiers contenant des espaces et fonctionnera également avec /path/to/*.JPG. Vous êtes invités à soumettre votre propre réponse, bien sûr :)
— Johnsyweb

Bien sûr, le nom de base supprimera les principaux répertoires mais fonctionnera avec les espaces à l'intérieur des noms de fichiers. (Je ne pense pas que cela mérite une réponse;) alors je l'ai posté comme commentaire)
— math

10

Si vous pouvez utiliser des outils externes (pas seulement bash), vérifiez la renamecommande!

rename .JPG .jpg *

Le renamefait partie de util-linux.


renommer est ... problématique. Il existe une version de renommage qui perlaccepte différents arguments pour faire la même chose.
— cha0site

Pourriez-vous expliquer un peu plus? Quelle version BTW?
— math

3

Si vous avez des espaces dans les noms de fichiers:

for f in *.JPG; do [[ -f "${f}" ]] && mv "${f}" "${f/%JPG/jpg}"; done

2

Je suggère de jeter un œil à la mmvcommande. Il convient parfaitement à ce type de tâches. Dans votre scénario, ce serait:

#> mmv "*.JPG" "#1.jpg"

La page de manuel regorge d'exemples, il ne faut donc pas de temps pour s'y habituer.

Sur les systèmes Debian , il peut être installé avec:

#> aptitude install mmv

0

si vous n'avez pas d'espace dans les noms de fichiers:

for f in *.JPG; do mv $f `echo $f | sed 's/JPG$/jpg/'`; done

1
Il serait assez facile de faire fonctionner cela pour les fichiers avec des espaces dans le nom: ajoutez simplement des guillemets doubles autour des deux arguments mv.
— Adam Zalcman

Je n'ai pas d'espace. Que dois-je ajouter pour que cela se produise dans le répertoire CURRENT. Pour le moment, je reçois une erreur - mv: ne peut pas stat `* .JPG ': Aucun fichier ou répertoire
— Mark Flint

1
vous n'y avez pas de JPG.
— Karoly Horvath
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.