#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
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…
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.
Hors ligne