105 votes

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?

222voto

Stephan202 Points 27707

Autre commande sans explicite d'une boucle (man find):

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

Explication: ce de manière récursive trouve tous les fichiers (-type f), en commençant à partir du répertoire courant (.) et applique la commande de déplacement (mv) pour chacun d'eux. Notez également les guillemets autour de {}, de sorte que les noms de fichiers avec des espaces (et même des retours à la ligne...) sont correctement gérées.

62voto

ghostdog74 Points 86060

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

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

9voto

Chad Huneycutt Points 171

C'est un peu tard, mais j'ai pensé que je voudrais ajouter qu'une meilleure solution (bien que peut-être moins lisible) que celles jusqu'ici peut-être:

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

À l'aide de l' find | xargs modèle entraîne généralement plus efficace de l'exécution, tant que vous n'avez pas à fourche d'un nouveau processus pour chaque fichier.

À noter que cela nécessite la version de renommer trouvé dans Debian à saveur de distributions (aka prename), plutôt que la traditionnelle renommer. C'est juste un petit script perl qui, de ce fait, il serait assez facile d'utiliser la commande ci-dessus sur n'importe quel système.

4voto

nik Points 8025

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 les find . par find /target/directory .

0voto

dfa Points 54490

rename

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X