Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 09/07/2014, à 16: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, à 17:07)


Silvio
Xubuntu 14.04 LTS

Hors ligne

#2 Le 09/07/2014, à 16: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.


Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

Hors ligne

#3 Le 09/07/2014, à 16:26

Silvio66

Re : [Résolu] Script (mais pas que) pour couper le nom d'un fichier

Merci pour ta rapidité jplemoine:

jplemoine a écrit :

1 - le début à garder est-il unique ?

Tous les fichiers commencent par 66-2012, ce qui change c'est le reste

jplemoine a écrit :

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, à 16: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.


Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

Hors ligne

#5 Le 09/07/2014, à 16: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.


Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

Hors ligne

#6 Le 09/07/2014, à 16: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, à 16: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, à 16:53)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#8 Le 09/07/2014, à 17:06

jplemoine

Re : [Résolu] Script (mais pas que) pour couper le nom d'un fichier

Silvio66 a écrit :

Ç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, à 17:07)


Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

Hors ligne

#9 Le 09/07/2014, à 17: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, à 17:40)


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 22.04, 22.04, 23.04
Portable1 : Intel(R) Core(TM)2 Duo CPU     T6570  @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 23.04 ( 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, à 17: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 22.04, 22.04, 23.04
Portable1 : Intel(R) Core(TM)2 Duo CPU     T6570  @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 23.04 ( 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, à 17: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...


Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

Hors ligne

#12 Le 09/07/2014, à 17: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... smile !


Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

Hors ligne

#13 Le 09/07/2014, à 18:01

ar barzh paour

Re : [Résolu] Script (mais pas que) pour couper le nom d'un fichier

smile
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 22.04, 22.04, 23.04
Portable1 : Intel(R) Core(TM)2 Duo CPU     T6570  @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 23.04 ( 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, à 20: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, à 20: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, à 21:03)


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 22.04, 22.04, 23.04
Portable1 : Intel(R) Core(TM)2 Duo CPU     T6570  @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 23.04 ( 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, à 22: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, à 22:18)


Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

Hors ligne

#17 Le 09/07/2014, à 22: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 wink
ma solution 100% bash a dû passer inaperçue hmm

Dernière modification par Watael (Le 09/07/2014, à 22:30)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#18 Le 09/07/2014, à 22: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 ?


Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

Hors ligne

#19 Le 09/07/2014, à 22: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, à 23:25)

Hors ligne

#20 Le 10/07/2014, à 00: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 10/07/2014, à 00: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 10/07/2014, à 00:38)


Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

Hors ligne

#22 Le 10/07/2014, à 00:35

melixgaro

Re : [Résolu] Script (mais pas que) pour couper le nom d'un fichier

jplemoine a écrit :

Merci à vous 2 : j'apprends plein de trucs sur ce post.

Pareil pour moi : merci !


Linux depuis ~2007. Xubuntu seulement.

Hors ligne

#23 Le 10/07/2014, à 00: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, à 06: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 22.04, 22.04, 23.04
Portable1 : Intel(R) Core(TM)2 Duo CPU     T6570  @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 23.04 ( 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, à 07: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