#1 Le 09/07/2014, à 15:02
- Silvio66
[Résolu] Script (mais pas que) pour couper le nom d'un fichier
Bonjour à tous,
Désolé si ce sujet à déjà été posté, mais je n'arrive pas à m'en sortir.
Je dois renommer environ un milliers de fichiers car le nom est trop long et mon logiciel SIG ne le reconnaît pas.
Les fichiers actuellement sont ainsi nommés :
66-2012-0594-6158-LA93-0M50-RVB-E100.ecw
je voudrais, au final, ce résultat:
66-2012-0594-6158.ecw
Est-ce que c'est possible?
D'avance merci.
Dernière modification par Silvio66 (Le 11/07/2014, à 16:07)
Silvio
Xubuntu 14.04 LTS
Hors ligne
#2 Le 09/07/2014, à 15:09
- jplemoine
Re : [Résolu] Script (mais pas que) pour couper le nom d'un fichier
Si le début que tu veux couper est unique, oui, c'est possible...
Après je ne suis pas spécialiste au point de sortir un listing en 30 secondes...
Je vais chercher mais :
1 - le début à garder est-il unique ?
2 - les fichiers sont-ils dans le même répertoire.
Ce compte ne servira plus : vous pouvez le supprimer si le coeur vous en dit...
Laissé par l'auteur pour historique.
Hors ligne
#3 Le 09/07/2014, à 15:26
- Silvio66
Re : [Résolu] Script (mais pas que) pour couper le nom d'un fichier
Merci pour ta rapidité jplemoine:
1 - le début à garder est-il unique ?
Tous les fichiers commencent par 66-2012, ce qui change c'est le reste
2 - les fichiers sont-ils dans le même répertoire.
Oui, tout à fait.
Silvio
Xubuntu 14.04 LTS
Hors ligne
#4 Le 09/07/2014, à 15:37
- jplemoine
Re : [Résolu] Script (mais pas que) pour couper le nom d'un fichier
En faisant une copie des fichiers (au moins en partie), tu peux tester ça :
#! /bin/bash
for fichier in *.jpg
do
fichier2_1=`echo "$fichier" | awk -F "-" '{print $1}'`
fichier2_2=`echo "$fichier" | awk -F "-" '{print $2}'`
fichier2_3=`echo "$fichier" | awk -F "-" '{print $3}'`
fichier2_4=`echo "$fichier" | awk -F "-" '{print $4}'`
ext2=`echo "$fichier" | awk -F "." '{print $2}'`
$fichier2=`echo "$fichier2_1-$fichier2_2-$fichier2_3-$fichier2_4.$ext2"`
echo "mv $fichier $fichier2"
done
A mettre dans un fichier texte et en donnant les droits d’exécution à ce fichier.
Si les fichiers resultats sont bons, enlève le echo et les " dans le mv.
Ce compte ne servira plus : vous pouvez le supprimer si le coeur vous en dit...
Laissé par l'auteur pour historique.
Hors ligne
#5 Le 09/07/2014, à 15:38
- jplemoine
Re : [Résolu] Script (mais pas que) pour couper le nom d'un fichier
Il doit y avoir plus simple à faire mais ça devrait fonctionner.
Ce compte ne servira plus : vous pouvez le supprimer si le coeur vous en dit...
Laissé par l'auteur pour historique.
Hors ligne
#6 Le 09/07/2014, à 15:50
- Silvio66
Re : [Résolu] Script (mais pas que) pour couper le nom d'un fichier
Ça ne marche pas...:(
J'ai lancé le script après l'avoir rendu exécutable mais aucune trace des fichiers renommés, au moins que il soient placé ailleurs...
Silvio
Xubuntu 14.04 LTS
Hors ligne
#7 Le 09/07/2014, à 15:52
- Watael
Re : [Résolu] Script (mais pas que) pour couper le nom d'un fichier
salut,
Il doit y avoir plus simple
oui :
$ filename="66-2012-0594-6158-LA93-0M50-RVB-E100.ecw"
$ ext=${filename##*.}
$ restrict=${filename%-*-*-*-*}
$ echo "$restrict.$ext"
66-2012-0594-6158.ecw
ça doit être encore plus simple, et beaucoup plus rapide, avec rename et ses "regex perl".
Dernière modification par Watael (Le 09/07/2014, à 15:53)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#8 Le 09/07/2014, à 16:06
- jplemoine
Re : [Résolu] Script (mais pas que) pour couper le nom d'un fichier
Ça ne marche pas...:(
J'ai lancé le script après l'avoir rendu exécutable mais aucune trace des fichiers renommés, au moins que il soient placé ailleurs...
Normalement, ça doit écrire le nom des fichiers sur la console...
user@machine$./script
nomfic1
nomfic2
...
nomficn
Si les noms des fichiers sont bons, il faut que tu remplaces
echo "mv $fichier $fichier2"
par
mv $fichier $fichier2
pour renommer avec perte du fichier initial
OU
cp $fichier $fichier2
si tu veux copier les fichiers (tu peux aussi les mettre dans un autre répertoire )
mkdir test
et mettre test/$fichier2 au lieu de $fichier2
Dernière modification par jplemoine (Le 09/07/2014, à 16:07)
Ce compte ne servira plus : vous pouvez le supprimer si le coeur vous en dit...
Laissé par l'auteur pour historique.
Hors ligne
#9 Le 09/07/2014, à 16:23
- ar barzh paour
Re : [Résolu] Script (mais pas que) pour couper le nom d'un fichier
précaution d'usage : prévoir des sauvegardes des originaux
le formatage des fichiers doit être xxx-yyyy-zzzz-tttt-aaaaaaaaaa.ecw
le fichier xxx-yyyy-zzzz-tttt-aaaaaaaaaa.ecw deviendra xxx-yyyy-zzzz-tttt.ecw
j'ai noté deux "erreurs" dans le script
#! /bin/bash
for fichier in *.ecw #ecw et non jpg
do
fichier2_1=`echo "$fichier" | awk -F "-" '{print $1}'`
fichier2_2=`echo "$fichier" | awk -F "-" '{print $2}'`
fichier2_3=`echo "$fichier" | awk -F "-" '{print $3}'`
fichier2_4=`echo "$fichier" | awk -F "-" '{print $4}'`
ext2=`echo "$fichier" | awk -F "." '{print $2}'`
# pas de $ devant fichier2 et la suite est plus simple
fichier2="$fichier2_1-$fichier2_2-$fichier2_3-$fichier2_4.$ext2"
echo "mv $fichier $fichier2"
#à remplacer par mv $fichier $fichier2 ( ou cp $fichier test/$fichier2 pour une copie )
done
Dernière modification par ar barzh paour (Le 09/07/2014, à 16:40)
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( en voyage )
Portable2 : T5750 @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )
Hors ligne
#10 Le 09/07/2014, à 16:36
- ar barzh paour
Re : [Résolu] Script (mais pas que) pour couper le nom d'un fichier
attention
il faut être sur que le début de chaque fichier est différent sinon ,il y aura écrasement :
le fichier a-b-c-d-e-f-g-h.ecw va générer le fichier a-b-c-d.ecw
le fichier a-b-c-d-e-x-y-z.ecw va générer le même fichier a-b-c-d.ecw donc écraser le premier
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( en voyage )
Portable2 : T5750 @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )
Hors ligne
#11 Le 09/07/2014, à 16:39
- jplemoine
Re : [Résolu] Script (mais pas que) pour couper le nom d'un fichier
- pour l'affectation de fichier2, oui : grosse erreur de ma part...
- pour le echo, c'était une précaution : ça liste les instructions --> si le echo renvoit "ce qu'il faut", on vire le echo et les " --> je fais comme ça pour moi...
Ce compte ne servira plus : vous pouvez le supprimer si le coeur vous en dit...
Laissé par l'auteur pour historique.
Hors ligne
#12 Le 09/07/2014, à 16:40
- jplemoine
Re : [Résolu] Script (mais pas que) pour couper le nom d'un fichier
je ne suis plus dispo : si quelqu'un veut/peut prendre la suite... !
Ce compte ne servira plus : vous pouvez le supprimer si le coeur vous en dit...
Laissé par l'auteur pour historique.
Hors ligne
#13 Le 09/07/2014, à 17:01
- ar barzh paour
Re : [Résolu] Script (mais pas que) pour couper le nom d'un fichier
la première "anomalie" (triviale) était le *.jpg au lieu de *.ecw
sinon le script fonctionne très bien ! pour ce qu'il y a à faire
(j'ai mis un bémol quand même dans le post #10)
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( en voyage )
Portable2 : T5750 @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )
Hors ligne
#14 Le 09/07/2014, à 19:22
- melixgaro
Re : [Résolu] Script (mais pas que) pour couper le nom d'un fichier
Salut,
Une bonne idée serait de remplacer
mv
par
mv -i
Comme ça, en cas de doublon, le terminal demandera quoi faire. Ça évitera un écrasement de fichier.
Linux depuis ~2007. Xubuntu seulement.
Hors ligne
#15 Le 09/07/2014, à 19:59
- ar barzh paour
Re : [Résolu] Script (mais pas que) pour couper le nom d'un fichier
+1 à melixgaro
mv -i $fichier $fichier2
ou
cp -i $fichier test/$fichier2
Dernière modification par ar barzh paour (Le 09/07/2014, à 20:03)
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( en voyage )
Portable2 : T5750 @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )
Hors ligne
#16 Le 09/07/2014, à 21:16
- jplemoine
Re : [Résolu] Script (mais pas que) pour couper le nom d'un fichier
vu pour ecw au lieu de jpg : c'est que j'ai testé sur les jpg.
Je refais un listing avec vos remarques :
#! /bin/bash
for fichier in *.ecw
do
fichier2_1=`echo "$fichier" | awk -F "-" '{print $1}'`
fichier2_2=`echo "$fichier" | awk -F "-" '{print $2}'`
fichier2_3=`echo "$fichier" | awk -F "-" '{print $3}'`
fichier2_4=`echo "$fichier" | awk -F "-" '{print $4}'`
ext2=`echo "$fichier" | awk -F "." '{print $2}'`
fichier2="$fichier2_1-$fichier2_2-$fichier2_3-$fichier2_4.$ext2"
echo "mv -i $fichier $fichier2"
#à remplacer par mv -i $fichier $fichier2 ( ou cp -i $fichier $fichier2 pour une copie dans le même répertoire)
# mettre éventuellement dans un autre répertoire
done
Êtes-vous d'accord avec ce listing ? ou pas ?
Dernière modification par jplemoine (Le 09/07/2014, à 21:18)
Ce compte ne servira plus : vous pouvez le supprimer si le coeur vous en dit...
Laissé par l'auteur pour historique.
Hors ligne
#17 Le 09/07/2014, à 21:30
- Watael
Re : [Résolu] Script (mais pas que) pour couper le nom d'un fichier
bah, non :
autant d'appel à awk que de parties à couper, c'est moins que moyen
ma solution 100% bash a dû passer inaperçue
Dernière modification par Watael (Le 09/07/2014, à 21:30)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#18 Le 09/07/2014, à 21:40
- jplemoine
Re : [Résolu] Script (mais pas que) pour couper le nom d'un fichier
Houps ! Je ne l'ai effectivement pas pris en compte...
Pourrais-tu faire le listing avec la boucle for (qui reste ?) et ta solution 100% bash ?
Ce compte ne servira plus : vous pouvez le supprimer si le coeur vous en dit...
Laissé par l'auteur pour historique.
Hors ligne
#19 Le 09/07/2014, à 21:57
- UbuntOlivier
Re : [Résolu] Script (mais pas que) pour couper le nom d'un fichier
@Silvio66 :
Je vois Xubuntu dans ta signature, donc tu as XFCE ? Donc tu as Thunar comme gestionnaire de fichiers ? Donc tu as le renommage de masse avec la fonction F2 (ou clic-droit/Renommer… après avoir sélectionné plusieurs fichiers) ? Utilise alors l'option Chercher/Remplacer ou Supprimer des caractères (à partir de la droite), ça marchera tout seul… mais fais quand même un test sur qques fichiers avant de lancer le bazar pour 1 000 fichiers !
Ou alors, en bash il y a la commande mmv :
~> mmv "66-2012-*-*-*.ecw" "66-2012-#1-#2.ecw"
Les jokers ( * ? […] ) du masque source sont remplacés respectivement par #1, #2, #3 etc dans le masque destination (et dans n'importe quel ordre, on peut inverser ainsi des portions de noms de fichier). Ici, on garde les deux premiers et on n'utilise pas le troisième.
Cette commande ne s'exécutera pas s'il y a des collisions.
Bref, pas vraiment besoin de script dans ce cas-ci…
Dernière modification par UbuntOlivier (Le 09/07/2014, à 22:25)
Hors ligne
#20 Le 09/07/2014, à 23:20
- Watael
Re : [Résolu] Script (mais pas que) pour couper le nom d'un fichier
#!/bin/bash
ext=ecw
for f in *.$ext; do mv -i "$f" "${f%-*-*-*-*}.$ext"; done
voilà, voilà !
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#21 Le 09/07/2014, à 23:29
- jplemoine
Re : [Résolu] Script (mais pas que) pour couper le nom d'un fichier
@UbuntOlivier : je ne connaissais pas la commande mmv
@Watael : quel est intérêt de la variable ext ? ne peut-on pas mettre ecw en dur ?
Merci à vous 2 : j'apprends plein de trucs sur ce post.
Dernière modification par jplemoine (Le 09/07/2014, à 23:38)
Ce compte ne servira plus : vous pouvez le supprimer si le coeur vous en dit...
Laissé par l'auteur pour historique.
Hors ligne
#22 Le 09/07/2014, à 23:35
- melixgaro
Re : [Résolu] Script (mais pas que) pour couper le nom d'un fichier
Merci à vous 2 : j'apprends plein de trucs sur ce post.
Pareil pour moi : merci !
Linux depuis ~2007. Xubuntu seulement.
Hors ligne
#23 Le 09/07/2014, à 23:40
- Watael
Re : [Résolu] Script (mais pas que) pour couper le nom d'un fichier
quel est intérêt de la variable ext ? ne peut-on pas mettre ecw en dur ?
si le script doit être ré-utilisé avec une autre extension, celle-ci n'aura à être modifiée qu'à un seul endroit.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#24 Le 10/07/2014, à 05:48
- ar barzh paour
Re : [Résolu] Script (mais pas que) pour couper le nom d'un fichier
@watael
#! /bin/bash
ext=ecw
for f in *.$ext; do echo "test2/${f%-*-*-*-*}.$ext"; done
tous mes fichiers sont appelés A-B-C-D-xxxxxxxxxxx.ecw
résulat
test2/A.ecw
test2/A.ecw
test2/A.ecw
test2/A.ecw
etc
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( en voyage )
Portable2 : T5750 @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )
Hors ligne
#25 Le 10/07/2014, à 06:25
- pingouinux
Re : [Résolu] Script (mais pas que) pour couper le nom d'un fichier
Bonjour,
On peut simplifier la solution de jplemoine, avec un seul appel à awk par fichier :
#! /bin/bash
for fichier in *.ecw
do
fichier2=$(awk -v ext=ecw -F- '{printf("%s-%s-%s-%s.%s\n",$1,$2,$3,$4,ext)}' <<<"$fichier")
echo mv -i "$fichier" "$fichier2"
done
Hors ligne