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?
Réponses
Trop de publicités?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.
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.
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
.