logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

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

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

#1 29-01-2022 19:13:08

kékédukéké
Membre
Inscription : 29-01-2022

find -exec un casse tête !!!!

Bien le bonjours !

Vive l'apprentissage des lignes de commande et vive le casse tête ! big_smile
Je suis en plein casse tête avec la ligne la commande find et plus  particulière find -exec.

Je vous explique, j'essaie de m’entraîner sur la ligne de commande find. Et la je bloque sur un exercice que moi même j'essaie de faire et j'arrive pas.
En gros ça serai de déplacer des fichiers (qui ont le même suffixe, mais pas le préfixe). Qui sont dans des répertoires différent pour les copier tous dans un même dossier.
J'espère ne pas vous avoir perdu.

Exemple concret
J'ai envie que tout mes fichiers chien aillent dans le répertoire Images.

~$ find -name "chien*"
./animaux/chien.save
./animaux/chien
./chien1

j'ai essayer plusieurs commande pour que tout ce petit monde y aille et rien.. j'ai essayé :
~$find -name "chien*" -exec mv chien* Images \;

~$find -name "chien*" -execdir mv chien* Images \;

~$find -name "chien*" -ok mv chien* Images \;

Pour toute ces commandes seul chien1 est aller dans le répertoire Images. Car celui si ce trouve le répertoire ~.

Dernière modification par kékédukéké (29-01-2022 20:28:15)

Hors ligne

#2 29-01-2022 19:54:49

raleur
Membre
Inscription : 03-10-2014

Re : find -exec un casse tête !!!!

D'après toi, que fait cette commande ?

mv chien* Images


Il vaut mieux montrer que raconter.

Hors ligne

#3 29-01-2022 20:30:01

kékédukéké
Membre
Inscription : 29-01-2022

Re : find -exec un casse tête !!!!

ps : Désolé j'ai vu que je m'étais trompé je voulais pas dire copier mais déplacer.

Elle permet de déplacer tout les fichiers chien dans le répertoire Images.

Hors ligne

#4 29-01-2022 20:34:41

raleur
Membre
Inscription : 03-10-2014

Re : find -exec un casse tête !!!!

raleur a écrit :

je voulais pas dire copier mais déplacer.


Peu importe, la question n'est pas là.

kékédukéké a écrit :

Elle permet de déplacer tout les fichiers chien


Non, pas tous. Lesquels ?

PS : je ne vais pas te donner la réponse. Mon but est de te la faire trouver car c'est purement une question de logique. Si ça ne te convient pas, il suffit de ne pas me répondre.

Dernière modification par raleur (29-01-2022 20:37:08)


Il vaut mieux montrer que raconter.

Hors ligne

#5 29-01-2022 20:40:26

kékédukéké
Membre
Inscription : 29-01-2022

Re : find -exec un casse tête !!!!

Il va prendr en compte tout les fichier chien, qui commencerions par chien.  Et laissera de côté  les fichiers ayant un préfixe avant chien. ??

Hors ligne

#6 29-01-2022 20:43:21

raleur
Membre
Inscription : 03-10-2014

Re : find -exec un casse tête !!!!

Mauvaise réponse.
Où va-t-elle chercher les fichiers ? Sur tout le disque ? Dans un répertoire particulier ? Lequel ? Dans ses sous-répertoires ?

Dernière modification par raleur (29-01-2022 20:44:23)


Il vaut mieux montrer que raconter.

Hors ligne

#7 29-01-2022 20:51:19

kékédukéké
Membre
Inscription : 29-01-2022

Re : find -exec un casse tête !!!!

Je devrais faire ça ?

mv  chien*  animaux/../Images/

Il va dans le répertoire animaux ou ce trouve   chien.save et chien, pour revenir dans le répertoire home pour aller dans le répertoire Images.

Hors ligne

#8 29-01-2022 20:53:53

raleur
Membre
Inscription : 03-10-2014

Re : find -exec un casse tête !!!!

On s'égare...

Il vaut mieux montrer que raconter.

Hors ligne

#9 29-01-2022 20:56:31

kékédukéké
Membre
Inscription : 29-01-2022

Re : find -exec un casse tête !!!!

Ahhhh zuttt !!  pour répondre a ta question par cette commande que tu m'as dis.
Où va-t-elle chercher les fichiers ?   La commande demande à chercher dans le répertoire ou on ce trouve, car je lui rien demander.
Sur tout le disque ?  Non
Dans un répertoire particulier ? non
Lequel ? le home ou je suis
Dans ses sous-répertoires ? non

Hors ligne

#10 29-01-2022 21:34:43

raleur
Membre
Inscription : 03-10-2014

Re : find -exec un casse tête !!!!

kékédukéké a écrit :

La commande demande à chercher dans le répertoire ou on ce trouve


Voilà.

kékédukéké a écrit :

Dans un répertoire particulier ? non


Ben si : voir juste au dessus.

kékédukéké a écrit :

Lequel ? le home ou je suis


Non, pas le home. Celui où tu es.

kékédukéké a écrit :

Dans ses sous-répertoires ? non


Voilà.

Conclusion ?
Est-il normal qu'il se passe ce que tu as décrit dans ton message initial ?

kékédukéké a écrit :

Pour toute ces commandes seul chien1 est aller dans le répertoire Images


Et à quoi sert d'exécuter find avec une commande qui fait toujours la même chose ?

Dernière modification par raleur (29-01-2022 21:38:00)


Il vaut mieux montrer que raconter.

Hors ligne

#11 29-01-2022 21:40:16

kékédukéké
Membre
Inscription : 29-01-2022

Re : find -exec un casse tête !!!!

Find sert dans un premier temps à voir ou ce trouve la cible demandée. Et  permet de faire des action comme chmod ou mv etc..

Hors ligne

#12 29-01-2022 21:48:50

raleur
Membre
Inscription : 03-10-2014

Re : find -exec un casse tête !!!!

L'ennui, c'est que la commande exécutée fait toujours la même action sur les mêmes fichiers au même emplacement sans utiliser le résultat de find.

Il vaut mieux montrer que raconter.

Hors ligne

#13 29-01-2022 21:54:44

kékédukéké
Membre
Inscription : 29-01-2022

Re : find -exec un casse tête !!!!

D'accord c'est comme si il faisait un pont. Il saute les fichiers qui sont pas compris dans sa lignée ?

Hors ligne

#14 29-01-2022 22:06:50

raleur
Membre
Inscription : 03-10-2014

Re : find -exec un casse tête !!!!

Désolé, je n'ai rien compris à ton dernier message.
Ta commande find recherche tous les fichiers chien* dans le répertoire courant et ses sous-répertoires mais pour chaque fichier trouvé l'action déplace toujours les fichiers chien* du répertoire courant au lieu de déplacer le fichier trouvé.

Dernière modification par raleur (29-01-2022 22:08:34)


Il vaut mieux montrer que raconter.

Hors ligne

#15 29-01-2022 22:38:18

kékédukéké
Membre
Inscription : 29-01-2022

Re : find -exec un casse tête !!!!

OKay, donc tu veux dire que déjà je devrais modifier ma commande mv, pour qu'elle engloble les autres fichier chien*  à la place de déplacé seulement le fichier chien* du répertoire courant.

Hors ligne

#16 29-01-2022 22:42:56

raleur
Membre
Inscription : 03-10-2014

Re : find -exec un casse tête !!!!

kékédukéké a écrit :

je devrais modifier ma commande mv


Oui.

kékédukéké a écrit :

pour qu'elle engloble les autres fichier chien*


Non, pour qu'elle s'applique au fichier trouvé par find.


Il vaut mieux montrer que raconter.

Hors ligne

#17 29-01-2022 22:46:44

kékédukéké
Membre
Inscription : 29-01-2022

Re : find -exec un casse tête !!!!

J'ai essayer donc de modifier ma commande mv.
Je fais

find -name "chien*" -exec mv ./animaux/chien* Images \;

Déjà pas mal car j'arrive a déplacer tout les fichiers chien* du répertoire animaux, et à les déplacer dans Images. Tout en étant dans le répertoire ~. 
Le souci est que dans ce répertoire ~ il y a le fichier chien1 que j'arrive pas déplacer avec..

Dernière modification par kékédukéké (29-01-2022 22:47:28)

Hors ligne

#18 29-01-2022 22:50:39

Tawal
Membre
Distrib. : Debian Stable à jour
Noyau : amd64
(G)UI : Xfce
Inscription : 25-02-2021

Re : find -exec un casse tête !!!!

Hello

man find :

       -exec commande {} +
              Cette variante de l'option -exec exécute la commande spécifiée sur les fichiers sélectionnés, mais en ajoutant le  nom  de  chaque
              fichier  trouvé  à la fin de la ligne de commande. Le nombre total d'invocations de la commande sera donc très inférieur au nombre
              de fichiers trouvés. La ligne de commande est construite à la manière de xargs. Une seule instance de « {} » est permise à l'inté‐
              rieur de la commande et elle doit apparaître à la fin et immédiatement avant le « + » ; elle doit être échappée (avec un « \ ») ou
              entre guillemets pour la protéger d'une interprétation par les interpréteurs. La commande sera exécutée dans le répertoire de  dé‐
              part. Si une invocation avec la forme « + » renvoie une valeur différente de zéro comme code de retour, alors find renvoie un code
              de retour différent de zéro. Si find rencontre une erreur, cela peut parfois provoquer une fin  immédiate,  aussi  certaines  com‐
              mandes  en attente pourraient ne pas être exécutées. C'est pourquoi -exec ma_commande ... {} \+ -quit peut n'aboutir à aucune exé‐
              cution de ma_commande. Cette variante de -exec renvoie toujours vrai.


Pour rester dans l'esprit "cherche par toi même, c'est le meilleur apprentissage".

Dernière modification par Tawal (29-01-2022 22:52:32)


Comme la science n'est pas infuse, elle se diffuse.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

#19 29-01-2022 23:06:50

kékédukéké
Membre
Inscription : 29-01-2022

Re : find -exec un casse tête !!!!

Pour te répondre RALEUR: pour qu'elle engloble les autres fichier chien*

Non, pour qu'elle s'applique au fichier trouvé par find.

Alors la je t'avoue que je suis un peu bloqué je vois pas comment faire...  ça serai de trouver le bout de commande qui permettrai que find comprenne d'englober tout les fichier chien* 
-type -f ? Pourrais être peut etre utile..

Salut Tawal.

Alors je voudrais bien que tu m'expliques j'ai essayer de comprendre, j'avais regarder le man avant de poster sur le forum mais j'avais pas compris.. De même j'ai pas tres bien compris la différence entre exec et execdir ??

Hors ligne

#20 29-01-2022 23:34:42

Tawal
Membre
Distrib. : Debian Stable à jour
Noyau : amd64
(G)UI : Xfce
Inscription : 25-02-2021

Re : find -exec un casse tête !!!!

Un exemple :

find . -type f -name "chien*" -exec echo "Les fichiers trouvés sont : " '{}' \+


À toi, à partir de cet exemple, de trouver la bonne commande.

Avec execdir, la commande est exécutée à partir du dossier contenant le fichier trouvé.
Avec exec, la commande est exécutée à partir du dossier d'où est lancé find.
Et comme find renseigne les fichiers trouvés par des chemins relatifs au dossier d'où est lancé find, l'option exec peut poser quelques problèmes de résolution de nom de fichier.

La différence entre ; et + :
   - ; : un fichier trouvé = une invocation de la commande
   - + : tous les fichiers trouvés sont passés en argument à la commande en 1 seule fois, ce qui limite le nombre d'invocation de la commande. Dans le cas d'execdir, une invocation de commande par paquets de fichiers trouvés dans un même dossier.

Edit:
Essaie la commande que j'ai donnée avec execdir, tu verras la différence plus clairement wink

Dernière modification par Tawal (29-01-2022 23:47:23)


Comme la science n'est pas infuse, elle se diffuse.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

Pied de page des forums