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 21/01/2018, à 15:34

linuxm@c

Recherche et Renommer une liste de fichiers avec incrémentation

bonjour
la commande

tree ~/Images/

Donne

/home/linuxm@c/Images/
└── directories
    ├── 1.jpg
    ├── 2.jpg
    ├── 3.jpg
    ├── 4.jpg
    ├── 5.jpg
    ├── 6.jpg
    ├── 7.jpg
    ├── 8.jpg
    ├── 9.jpg
    ├── Pack1
    │   ├── 1.jpg
    │   ├── 2.jpg
    │   ├── 3.jpg
    │   ├── 4.jpg
    │   └── Pack4
    │       ├── 10.jpg
    │       ├── 1.jpg
    │       ├── 2.jpg
    │       ├── 3.jpg
    │       ├── 4.jpg
    │       ├── 5.jpg
    │       ├── 6.jpg
    │       ├── 7.jpg
    │       ├── 8.jpg
    │       └── 9.jpg
    └── Pack2
        ├── 1.jpg
        ├── 2.jpg
        ├── 3.jpg
        ├── 4.jpg
        ├── 5.jpg
        ├── 6.jpg
        ├── 7.jpg
        ├── 8.jpg
        ├── 9.jpg
        └── Pack3
            ├── 10.jpg
            ├── 1.jpg
            ├── 2.jpg
            ├── 3.jpg
            ├── 4.jpg
            ├── 5.jpg
            ├── 6.jpg
            ├── 7.jpg
            ├── 8.jpg
            └── 9.jpg

5 directories, 42 files

Pour renommer les image d' un seul répertoire --> voici la commande 

j=0;for i in *.jpg;do let j+=1;mv "$i" "mes-images$j.jpg";done

Question1 ==> comment faire la même chose en récursive ?
NB: ne pas oublier qu' il y a  des images qui portent le même nom dans des répertoires différents

Question2 ==> comment faire la même chose en récursive, mais en les copient dans un autre répertoire , et laissant le répertoire d'origine inchangeable  ?


j'ai testée avec cette commande, sans  succès

find ~/Images/ -name "*.jpg" -exec   j=0;for i in *.jpg;do let j+=1;mv "$i" "$j.jpg";done {} \;

Dernière modification par linuxm@c (Le 21/01/2018, à 16:24)

Hors ligne

#2 Le 21/01/2018, à 19:05

pingouinux

Re : Recherche et Renommer une liste de fichiers avec incrémentation

Pour renommer dans les répertoires d'origine, est-ce que ceci peut convenir ?

shopt -s globstar
cd ~/Images
rename -n 's/(\d+.jpg)$/mes-images$1/' **/*.jpg

Cette commande fait juste une simulation.Enlever le -n pour renommer réellement.

Ajouté :
Et si tu veux renuméroter sans tenir compte des nombres dans les noms des *.jpg

find ~/Images -type d -print -execdir bash -c 'j=0;for i in "$(pwd)/{}/"*.jpg;do echo mv "$i" "$(pwd)/{}/mes-images$((++j)).jpg";done' \;

Si c'est bon, enlever le echo devant mv

Dernière modification par pingouinux (Le 21/01/2018, à 19:32)

Hors ligne

#3 Le 22/01/2018, à 12:37

linuxm@c

Re : Recherche et Renommer une liste de fichiers avec incrémentation

solution 1 - ne marche pas
solution 2 - fonctionne

Dernière modification par linuxm@c (Le 23/01/2018, à 18:33)

Hors ligne

#4 Le 22/01/2018, à 13:34

pingouinux

Re : Recherche et Renommer une liste de fichiers avec incrémentation

C'est encore plus simple :

shopt -s globstar
dest=/tmp/destination
i=0
for f in **/*.jpg
do
   cp -pi "$f" "$dest/mes-images$((++i)).jpg"
done

Hors ligne

#5 Le 22/01/2018, à 17:12

linuxm@c

Re : Recherche et Renommer une liste de fichiers avec incrémentation

Les deux solutions  marchent  100%

                        - comment transformer les numéros 01 - 02- 03 au lieu de 1 - 2- 3  dans le resutat des deux commandes .
                        - quel rôle joue la commande shopt -s globstar

Dernière modification par linuxm@c (Le 23/01/2018, à 18:50)

Hors ligne

#6 Le 22/01/2018, à 19:26

pingouinux

Re : Recherche et Renommer une liste de fichiers avec incrémentation

- comment transformer les numéros 01 - 02- 03 au lieu de 1 - 2- 3  dans le resutat des deux commandes

find ~/Images -type d -print -execdir bash -c 'j=0;for i in "$(pwd)/{}/"*.jpg;do ((++j)); mv "$i" "$(pwd)/{}/mes-images$(printf "%02d" $j).jpg";done' \;
shopt -s globstar
dest=/tmp/destination
i=0
for f in **/*.jpg
do
   ((++i))
   cp -pi "$f" "$dest/mes-images$(printf "%02d" $i).jpg"
done

- quel rôle joue la commande shopt -s globstar

Voir man bash, rubrique SHELL BUILTIN COMMANDS :

globstar
                      If set, the pattern ** used in a pathname expansion con‐
                      text will match all files and zero or  more  directories
                      and  subdirectories.  If the pattern is followed by a /,
                      only directories and subdirectories match.

Hors ligne

#7 Le 23/01/2018, à 09:35

linuxm@c

Re : Recherche et Renommer une liste de fichiers avec incrémentation

Merci a MicP pour  l'astuce :     (man bash globstar  )  ... car  ( man  globstar )  ne marche pas

Comment faire pour que les photos prennent les noms des dossier avec renumérotation.

Dernière modification par linuxm@c (Le 23/01/2018, à 20:45)

Hors ligne

#8 Le 23/01/2018, à 14:56

pingouinux

Re : Recherche et Renommer une liste de fichiers avec incrémentation

linuxm@c #8 a écrit :

comment faire pour que les photos prennent les noms des dossier avec renumérotation.

Il aurait été préférable que tu réfléchisses dès le début à ce que tu voulais exactement.
Ma bonté me perdra… smile

export rep="Mes_Vacances"
find "$rep" -mindepth 1 -type d -execdir bash -c '
   j=0; shopt -s nullglob
   base=$(sed -r "s#^.*/$rep/##;s#/\./#_#" <<<"$(pwd)/{}")
   for i in "$(pwd)/{}/"*.jpg
   do
      ((++j)); mv "$i" "$(pwd)/{}/${base}_images$(printf "%02d" $j).jpg"
   done
' \;

Hors ligne

#9 Le 23/01/2018, à 15:14

Watael

Re : Recherche et Renommer une liste de fichiers avec incrémentation

si on ne doit pas descendre sous les premiers sous-répertoires, find est-il vraiment utile ?

for f in ./*/*; do if test -f "$f"; then : do stuff with "$f"; fi; done

non ?

sinon, plutôt que $(pwd), $PWD.


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

En ligne

#10 Le 23/01/2018, à 15:56

Watael

Re : Recherche et Renommer une liste de fichiers avec incrémentation

tu pourrais commencer par apprendre ça, et ça.


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

En ligne