J'ai environ 12000 images de différents types de fichiers, mais chacune d'elles a été renommée * .jpg.
Maintenant, je veux leur rendre leurs extensions appropriées, comment puis-je le faire
files
file-format
akabhirav
la source
la source
Réponses:
Vous pouvez le faire relativement facilement en bash:
C'est la même idée que la réponse de @ AB mais en utilisant des globes shell à la place de
find
. Le${f%%.*}
est le nom du fichier sans son extension. La-0
de lafile
commande permet d' imprimer un\0
après le nom de fichier que nous utilisons ensuitegrep
le type de fichier. Cela devrait fonctionner avec des noms de fichiers arbitraires, y compris ceux qui contiennent des espaces, des retours à la ligne ou toute autre chose. C'est${type,,}
une astuce pour obtenir des extensions minuscules. Il se convertiraitPNG
enpng
.Vous n'avez pas dit dans votre question, mais si vous avez besoin que cela soit récursif et descende dans des sous-répertoires, vous pouvez l'utiliser à la place:
L'
shopt -s globstar
activera l'option globstar de bash qui permet de faire**
correspondre les sous-répertoires:la source
**
de rentrer dans des sous-répertoires.file
qu'il ne spécifie pas toujours l'extension qu'il semble: il transforme un fichier bashfoo.bourne-again
ici par exemple!Le script ci-dessous peut être utilisé pour (récursivement) renommer une extension incorrectement définie,,
.jpg
par la bonne. S'il trouve un fichier illisible, il le signalera dans la sortie du script.Le script utilise le
imghdr
module, pour reconnaître les types suivants:rgb
,gif
,pbm
,pgm
,ppm
,tiff
,rast
,xbm
,jpeg
,bmp
,png
. Plus d'informations sur leimghdr
module ici . La liste peut être étendue avec plus de types, comme mentionné dans le lien.En l'état, il renomme spécifiquement les fichiers avec l'extension
.jpg
, comme mentionné dans la question. Avec un changement mineur, il peut être approprié de renommer n'importe quelle extension, ou un ensemble spécifique d'extensions, en la bonne (ou sans extension, comme ici ).Le script:
Comment utiliser
rename.py
Exécutez-le par la commande:
la source
Remarque: Mon approche semble être trop complexe. Je préférerais que les terdons répondent à votre place.
Vous pouvez utiliser la commande
file
pour déterminer le type de fichier:Avec ces informations, les fichiers peuvent être renommés:
Veuillez faire un test avant d'appliquer la commande à vos images
Exemple
la source
find -exec bash -c "..."
et tout faire là-dedans, soit utiliserwhile read -d '' name type
pour diviser le nom de fichier et lafile
sortie, puis analyser$type
pour obtenir le type de fichier. Ça ne vaut pas vraiment le coup, voir ma réponse pour savoir comment le faire beaucoup plus facilement en pure (ish) bash.