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.