Gardez à l'esprit qu'aucun système de fichiers Linux ou Unix n'utilise des "extensions" de style Windows ou VMS - ce n'est que par convention qu'un suffixe du nom de fichier est ".tif" ou ".c" ou ".o" ou ".so " ou peu importe.
Bruce Ediger
C'est bien ... J'importe des fichiers de Windows vers Linux :)
Paul
1
Techniquement parlant, Windows n'utilise pas d'extensions de fichiers non plus, c'est juste que le gestionnaire de fichiers de Windows 95 a continué à utiliser les derniers caractères du nom de fichier pour déterminer le type de fichier après avoir rompu le schéma de nommage MS-DOS et la convention est depuis restée.
RAKK
Réponses:
24
perl« s rename(comme généralement sur Debian où il est aussi appelé prename), ou ce dérivé ( renamepackage sur Debian):
rename 's/\.tif$//' *.tif
util-linuxrename(comme on le trouve généralement sur Red Hat, rename.ulsur Debian):
rename -- .tif '' *.tif
(notez que que l' on pourrait renommer blah.tiffany.tifà blahfany.tif)
Je crois que le changement de nom de "Debian" est de Larry Wall (livré avec Perl?) Et celui de "Red Hat" de util-linux (rename.ul dans Debian IIRC).
XTL
@XTL: Vrai. Je les appelle simplement ainsi car ce sont les programmes "renommer" que l'on trouve dans les dérivés Debian ou Red Hat.
Ignacio Vazquez-Abrams
Merci beaucoup! Je n'ai jamais réalisé qu'il existait différentes versions de «renommer». Je suppose qu'il existe d'autres différences subtiles entre les commandes dans debian et redhat. Je vais devoir rechercher certaines de leurs différences.
Paul
La deuxième commande a entraîné une syntaxe non valide, mais la première a fonctionné.
HelloWorld
6
Pour un non-renommage, vous pouvez faire:
$ for i in *.tif; do mv -i $i `basename $i .tif`; done
(-i pour mettre en garde contre le remplacement d'un fichier)
Version plus for i in ./*.tif; do mv -i "$i" "${i%.tif}"; done
sûre et
+1 sur le dernier commentaire ici. C'est plus sûr sur les noms de fichiers avec des espaces vides.
pétobens
1
@ jw013, votre commentaire devrait être une réponse de haut niveau.
Roland
1
rename -- .oldext .newext *.oldext
Cela remplace l'ancienne extension par la nouvelle. Pour supprimer simplement l'extension, vous pouvez explicitement passer une chaîne vide comme argument.
rename -- .gz.tmp '' *.gz.tmp
Avec la commande ci-dessus, tous les fichiers avec .gz.tmpextension dans le dossier actuel seront renommés filename.gz.
Cela suppose que l'implémentation util-linux renameest incompatible avec (et beaucoup plus limitée que) la renamecommande traditionnelle de perl.
Stéphane Chazelas
Notez également qu'il remplace la première occurrence de .oldextdans le nom de fichier, pas nécessairement l'extension ( foo.oldextasy.oldextserait renommée footasy.oldext).
Stéphane Chazelas
1
Si vous utilisez IBM AIX, vous n'aurez pas de renamecommande, donc pour supprimer des extensions de fichier par lots, vous devrez utiliser des commandes UNIX System V simples de vanille:
for file in *.tif; do
mv $file `echo $file | sed 's/.tif$//'`;
done;
Réponses:
perl
« srename
(comme généralement sur Debian où il est aussi appeléprename
), ou ce dérivé (rename
package sur Debian):util-linux
rename
(comme on le trouve généralement sur Red Hat,rename.ul
sur Debian):(notez que que l' on pourrait renommer
blah.tiffany.tif
àblahfany.tif
)la source
Pour un non-renommage, vous pouvez faire:
(-i pour mettre en garde contre le remplacement d'un fichier)
la source
for i in ./*.tif; do mv -i "$i" "${i%.tif}"; done
Cela remplace l'ancienne extension par la nouvelle. Pour supprimer simplement l'extension, vous pouvez explicitement passer une chaîne vide comme argument.
Avec la commande ci-dessus, tous les fichiers avec
.gz.tmp
extension dans le dossier actuel seront renommésfilename.gz
.Reportez-vous à l'article: Linux: supprimez les extensions de fichier pour plusieurs fichiers pour plus de détails.
la source
rename
est incompatible avec (et beaucoup plus limitée que) larename
commande traditionnelle deperl
..oldext
dans le nom de fichier, pas nécessairement l'extension (foo.oldextasy.oldext
serait renomméefootasy.oldext
).Si vous utilisez IBM AIX, vous n'aurez pas de
rename
commande, donc pour supprimer des extensions de fichier par lots, vous devrez utiliser des commandes UNIX System V simples de vanille:la source
pouvons-nous rendre cela récursif
la source