Debian Debian-France Debian-Facile Debian-fr.org Debian-fr.xyz Debian ? Communautés

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 11-03-2021 13:40:07

clodben
Membre
Inscription : 08-10-2016

Copier tous les fichiers images dans un seul répertoire ?

Voilà d'où m'est venu la question:
J'ai un site internet écrit avec l'aide de Wordpress et je désire récupérer tous mes fichiers images ou icônes et les placer dans un même répertoire, sous mon disque dur.
(REM >> je suis un débutant au niveau de la ligne de commande)
Comme Wordpress génère énormément de répertoires (les fichiers images sont placés dans différents répertoires et majoritairement dans des dossiers correspondant au mois où ils ont été installés...), après plus de 6 ans ... il y en a énormément.
J'ai dans mon disque dur une copie conforme et complète de mon site.
Alors j'ai pensé à la commande suivante, mais elle ne fonctionne pas comme il faut ...

root@mx:/media/semaphar/4bMyPs# cp -R /media/semaphar/4bMyPs/HOStPAPA21/origine.xyz {*.jpg,*.png,*.gif,*.ico} /media/semaphar/4bMyPs/0jpg
cp: impossible d'évaluer '.jpg': Aucun fichier ou dossier de ce type
cp: impossible d'
évaluer '.png': Aucun fichier ou dossier de ce type
cp: impossible d'évaluer '.gif': Aucun fichier ou dossier de ce type
cp: impossible d'
évaluer '.ico': Aucun fichier ou dossier de ce type

 


Et si j'enlève {*.jpg,*.png,*.gif,*.ico} et je refais la commande :

cp -R /media/semaphar/4bMyPs/HOStPAPA21/origine.xyz/*.jpg  /media/semaphar/4bMyPs/0jpg



Alors je me retrouve avec la même quantité de sous-répertoire dans /0jpg ...
Que faire?

Dernière modification par clodben (11-03-2021 13:42:03)

Hors ligne

#2 11-03-2021 16:27:21

Tawal
Membre
Distrib. : Debian 10 Buster
Noyau : Linux 4.19.0-16-amd64
(G)UI : Xfce4
Inscription : 25-02-2021

Re : Copier tous les fichiers images dans un seul répertoire ?

Hello,

Avec find

find /media/semaphar/4bMyPs/HOStPAPA21/origine.xyz -type f  \( -iname *.jpg -o -iname *.png -o -iname *.ico -o -iname *.gif \) -exec cp '{}' /media/semaphar/4bMyPs/0jpg \;


En supposant que toutes tes images sont dans le dossier /media/semaphar/4bMyPs/HOStPAPA21/origine.xyz et que ton dossier destination est /media/semaphar/4bMyPs/0jpg

Au plaisir.

EDIT: Attention, si des fichiers images portent le même nom dans des dossiers différents !

Dernière modification par Tawal (11-03-2021 16:30:47)


Comme la science n'est pas infuse, elle se diffuse.

Hors ligne

#3 11-03-2021 17:38:02

DarKou
Membre
Lieu : Bordeaux
Distrib. : Gentoo / Debian Buster
Noyau : stable de chez kernel.org
(G)UI : Sway
Inscription : 06-04-2020
Site Web

Re : Copier tous les fichiers images dans un seul répertoire ?

clodben a écrit :

Voilà d'où m'est venu la question:
J'ai un site internet écrit avec l'aide de Wordpress et je désire récupérer tous mes fichiers images ou icônes et les placer dans un même répertoire, sous mon disque dur.
(REM >> je suis un débutant au niveau de la ligne de commande)
Comme Wordpress génère énormément de répertoires (les fichiers images sont placés dans différents répertoires et majoritairement dans des dossiers correspondant au mois où ils ont été installés...), après plus de 6 ans ... il y en a énormément.
J'ai dans mon disque dur une copie conforme et complète de mon site.
Alors j'ai pensé à la commande suivante, mais elle ne fonctionne pas comme il faut ...

root@mx:/media/semaphar/4bMyPs# cp -R /media/semaphar/4bMyPs/HOStPAPA21/origine.xyz {*.jpg,*.png,*.gif,*.ico} /media/semaphar/4bMyPs/0jpg
cp: impossible d'évaluer '.jpg': Aucun fichier ou dossier de ce type
cp: impossible d'
évaluer '.png': Aucun fichier ou dossier de ce type
cp: impossible d'évaluer '.gif': Aucun fichier ou dossier de ce type
cp: impossible d'
évaluer '.ico': Aucun fichier ou dossier de ce type

 


Et si j'enlève {*.jpg,*.png,*.gif,*.ico} et je refais la commande :

cp -R /media/semaphar/4bMyPs/HOStPAPA21/origine.xyz/*.jpg  /media/semaphar/4bMyPs/0jpg



Alors je me retrouve avec la même quantité de sous-répertoire dans /0jpg ...
Que faire?



Salut,

Il y a un bug sur ta commande :

cp -R /media/semaphar/4bMyPs/HOStPAPA21/origine.xyz {*.jpg,*.png,*.gif,*.ico} /media/semaphar/4bMyPs/0jpg



Il y a un espace et non un / avant le {.

Hors ligne

#4 11-03-2021 18:47:17

Tawal
Membre
Distrib. : Debian 10 Buster
Noyau : Linux 4.19.0-16-amd64
(G)UI : Xfce4
Inscription : 25-02-2021

Re : Copier tous les fichiers images dans un seul répertoire ?

DarKou a écrit :

Salut,

Il y a un bug sur ta commande :

cp -R /media/semaphar/4bMyPs/HOStPAPA21/origine.xyz {*.jpg,*.png,*.gif,*.ico} /media/semaphar/4bMyPs/0jpg



Il y a un espace et non un / avant le {.



Oui, mais en la corrigeant, il obtiendra le même résultat que sa dernière commande : toute l'arborescence sera dupliquée.


Comme la science n'est pas infuse, elle se diffuse.

Hors ligne

#5 13-03-2021 08:20:14

clodben
Membre
Inscription : 08-10-2016

Re : Copier tous les fichiers images dans un seul répertoire ?

Merci beaucoup à tous, pour votre généreuse contribution!

Un merci particulier à Tawal, c'est ta solution que je vais retenir car elle fonctionne parfaitement bien.

find /media/semaphar/4bMyPs/HOStPAPA21/origine.xyz -type f  \( -iname *.jpg -o -iname *.png -o -iname *.ico -o -iname *.gif \) -exec cp '{}' /media/semaphar/4bMyPs/0jpg \;


N.B. J'ai procédé à cette "ligne" de commande à partir d'un terminal ouvert dans le répertoire d'origine; ici le dossier origine.xyz  

Hors ligne

#6 13-03-2021 10:29:33

Tawal
Membre
Distrib. : Debian 10 Buster
Noyau : Linux 4.19.0-16-amd64
(G)UI : Xfce4
Inscription : 25-02-2021

Re : Copier tous les fichiers images dans un seul répertoire ?

Hello,

J'ai indiqué cette commande  en supposant que tu ne voulais la passer qu'une seule fois.
Et je rappelle que des fichiers images portant le même nom (mais dans des dossiers différents) poseront problème.

Si tu veux en faire un script, il vaut mieux ne pas utiliser find.
Et utiliser des boucles avec des globs.

Au plaisir.

Comme la science n'est pas infuse, elle se diffuse.

Hors ligne

#7 13-03-2021 12:48:00

vv222
Administrateur
Lieu : Bretagne
Distrib. : GNU/Linux Debian « Sid »
Noyau : Linux ≥ 5.10 (amd64)
(G)UI : Openbox
Inscription : 18-11-2013
Site Web

Re : Copier tous les fichiers images dans un seul répertoire ?

Tawal a écrit :

Si tu veux en faire un script, il vaut mieux ne pas utiliser find.
Et utiliser des boucles avec des globs.



Tiens, j’aurais conseillé exactement le contraire wink
De mon expérience, find est beaucoup plus robuste pour l’utilisation dans des scripts que les globs.


Jouer sous Debian ? Facile !

En ligne

#8 13-03-2021 13:48:40

clodben
Membre
Inscription : 08-10-2016

Re : Copier tous les fichiers images dans un seul répertoire ?

Malheureusement, je ne connais pas encore toutes les commandes en mode terminal... Je ne connais que les plus simples d'usage courant...
et je ne connais pas leur particularités.

Hors ligne

#9 13-03-2021 17:23:02

Tawal
Membre
Distrib. : Debian 10 Buster
Noyau : Linux 4.19.0-16-amd64
(G)UI : Xfce4
Inscription : 25-02-2021

Re : Copier tous les fichiers images dans un seul répertoire ?

vv222 a écrit :

De mon expérience, find est beaucoup plus robuste pour l’utilisation dans des scripts que les globs.


Bah non !
Un find .... -print0 est aussi solide qu'un for i in ./*
En suite on peut jouer sur les options shell avec shopt (c'est même plutôt recommandé).
Il faut donc un shopt -s nullglob globstar dotglob
nullglob : éviter les chaînes vides
globstar : Pour matcher les dossiers et sous dossiers avec le glob **/*
dotglob : pour que les globs prennent aussi les fichiers et dossiers cachés (commençant par un ".")

find est surtout utile pour des recherches spécifiques ou sur plusieurs dossiers séparés.

Au plaisir

Dernière modification par Tawal (13-03-2021 17:23:25)


Comme la science n'est pas infuse, elle se diffuse.

Hors ligne

#10 13-03-2021 19:23:29

vv222
Administrateur
Lieu : Bretagne
Distrib. : GNU/Linux Debian « Sid »
Noyau : Linux ≥ 5.10 (amd64)
(G)UI : Openbox
Inscription : 18-11-2013
Site Web

Re : Copier tous les fichiers images dans un seul répertoire ?

Tawal a écrit :

Un find .... -print0 est aussi solide qu'un for i in ./*


Un exemple tout con où les globs se viandent : lance tes deux commandes dans un répertoire vide wink

Tawal a écrit :

En suite on peut jouer sur les options shell avec shopt (c'est même plutôt recommandé).
Il faut donc un shopt -s nullglob globstar dotglob
nullglob : éviter les chaînes vides
globstar : Pour matcher les dossiers et sous dossiers avec le glob **/*
dotglob : pour que les globs prennent aussi les fichiers et dossiers cachés (commençant par un ".")


Je développe en shell depuis pas mal d’années, mais uniquement des scripts portables (POSIX ou presque). Je ne connais aucune de ces options, qui sont probablement spécifiques de Bash.


Jouer sous Debian ? Facile !

En ligne

#11 13-03-2021 21:13:13

Tawal
Membre
Distrib. : Debian 10 Buster
Noyau : Linux 4.19.0-16-amd64
(G)UI : Xfce4
Inscription : 25-02-2021

Re : Copier tous les fichiers images dans un seul répertoire ?

Re,

Oui, c'est spécifique à Bash (je crois même à partir de la version 3)

vv222 a écrit :

Un exemple tout con où les globs se viandent : lance tes deux commandes dans un répertoire vide


Justement le : shopt -s nullglob évite les entrées vides.
Le fait de "protéger" le glob par "./" permet de prendre en compte les noms de fichiers commençant par un - (évite surtout d'être pris pour une option)

Je suis un piètre scripteur (pire qu'un kiddie) avec pas mal de mauvaises habitudes. J'essaie de rattraper ça smile

$ ls
$ shopt -s nullglob globstar
$ for i in ./**/*; do echo "Fichier : $i"; done
$

ici besoin que de nullglob (chaine vide) et de globstar (interprétation de **)

Au plaisir.


Comme la science n'est pas infuse, elle se diffuse.

Hors ligne

#12 17-03-2021 09:40:02

Tawal
Membre
Distrib. : Debian 10 Buster
Noyau : Linux 4.19.0-16-amd64
(G)UI : Xfce4
Inscription : 25-02-2021

Re : Copier tous les fichiers images dans un seul répertoire ?

Tawal a écrit :

Oui, c'est spécifique à Bash (je crois même à partir de la version 3)



Alors oui, c’est bien spécifique à Bash.
Mais c'est apparu à partir de la version 4 de Bash.
Donc, ce n'est pas si vieux que ça wink

Au plaisir.


Comme la science n'est pas infuse, elle se diffuse.

Hors ligne

Pied de page des forums