web-dev-qa-db-fra.com

ajouter récursivement une extension de fichier à tous les fichiers

J'ai quelques répertoires et sous-répertoires contenant des fichiers sans extension de fichier. Je veux ajouter .jpg à tous les fichiers contenus dans ces répertoires. J'ai vu des scripts bash pour changer l'extension du fichier mais pas pour en ajouter un. Il doit également être récursif. Quelqu'un peut-il aider s'il vous plaît?

101
robjmills

Commande alternative sans boucle explicite ( man find ):

find . -type f -exec mv '{}' '{}'.jpg \;

Explication: ceci trouve tous les fichiers de manière récursive (-type f) à partir du répertoire actuel (.) et applique la commande de déplacement ( mv ) à chacun d’eux. Notez également les guillemets autour de {}, de sorte que les noms de fichiers comportant des espaces (et même des nouvelles lignes ...) soient correctement gérés.

217
Stephan202

cela va trouver des fichiers sans extension et ajouter votre .jpg

find /path -type f -not -name "*.*" -exec mv "{}" "{}".jpg \;
59
ghostdog74

C'est un peu tard, mais j'ai pensé ajouter une meilleure solution (bien que peut-être moins lisible) que celles proposées jusqu'à présent:

find /path -type f -not -name "*.*" -print0 | xargs -0 rename 's/(.)$/$1.jpg/'

En utilisant le find | xargs pattern entraîne généralement une exécution plus efficace, car vous n'avez pas à créer un nouveau processus pour chaque fichier.

Notez que cela nécessite la version du changement de nom trouvée dans les distributions Debian (nommément prename), plutôt que le changement de nom traditionnel. Cependant, ce n'est qu'un petit script Perl, il serait donc assez facile d'utiliser la commande ci-dessus sur n'importe quel système.

9
Chad Huneycutt

comme ça,

for f in $(find . -type f); do mv $f ${f}.jpg; done

Je ne m'attends pas à ce que vous ayez des noms de fichiers séparés par des espaces,
Si vous le faites, les noms devront être traités un peu.

Si vous voulez exécuter la commande depuis un autre répertoire,
vous pouvez remplacer le find . avec find /target/directory.

4
nik

Pour renommer tous les fichiers sans extension dans Windows Basic, vous pouvez faire ren * *.jpg Puisque le fichier n’a pas d’extension, utilisez simplement le *, ou si vous voulez changer le png en jpg, utilisez ren *.png *.jpg

1
Nuno

rename

pas sûr qu'il puisse renommer des fichiers sans extensions (je suis sous Windows 7 en ce moment)

0
dfa