Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

problème « find -execdir mv » sous Sid

3 réponses
Avatar
debiancbien
Bonjour à tous,

J'ai le problème suivant sous Sid  :
_______________________________________________________________________
$ tree -F --noreport
.
|__ test/
|__ TEST01

$ find . -regex ".*TEST01" -execdir mv '{}' test \;

$ tree -F --noreport
.
|__ test/
|__ test
________________________________________________________________________

Y'aurait-il un aimable collègue sidien dans la salle pour me dire si
c'est reproductible ?... ou pour m'expliquer la raison de ce
comportement irritant ? :)

J'ai également essayé avec un compte utilisateur « vierge » mais sans
succès. Par contre, le problème n'existe ni sous Squeeze ni sous
Slackware (13.37), qui donnent le résultat attendu.

Dans tous les cas, l'interpréteur était « bash » et la version des
findutils sous Sid est la 4.4.2-1+b1

Merci d'avance,
Alexandre

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers debian-user-french-REQUEST@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listmaster@lists.debian.org
Archive: http://lists.debian.org/20110507204249.GA2891@localhost

3 réponses

Avatar
Rémi Vanicat
debiancbien writes:

Bonjour à tous,

J'ai le problème suivant sous Sid  :
_______________________________________________________________________
$ tree -F --noreport
.
|__ test/
|__ TEST01

$ find . -regex ".*TEST01" -execdir mv '{}' test ;



Cela devrait faire ce que tu veux:

find . -regex ".*TEST01" -execdir mv -t test '{}' ;

ça forcera mv à être en mode « je déplace dans un répertoire » et non
en mode « je renomme »

ceci aussi devrais avoir un effet positif:

find . -regex ".*TEST01" -execdir mv -t test '{}' + ;

en plus cela devrait lancer qu'une fois mv par répertoire (et donc une
fois que find aura regarder le contenu du répertoire, enfin je suppose,
à tester)


L'option -depth de find devrait peut-être amélioré les choses, mais je
n'en suis pas sur....

$ tree -F --noreport
.
|__ test/
|__ test
________________________________________________________________________

Y'aurait-il un aimable collègue sidien dans la salle pour me dire si
c'est reproductible ?... ou pour m'expliquer la raison de ce
comportement irritant ? :)



Ça ressemble à un problème de sous spécification: je n'ai pas relus en
complet le man de find, mais rien n'assure que find vas traiter le
contenu des sous répertoire avant le contenu du répertoire courant. Donc
les deux comportement semble possible. Et un changement dans find ou
autre chose à fait passer le comportement réel de l'un à l'autre.


--
Rémi Vanicat

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Avatar
debiancbien
On Sun, May 08, 2011 at 09:06:57AM +0200, Rémi Vanicat wrote:
debiancbien writes:

> J'ai le problème suivant sous Sid  :
> _______________________________________________________________________
> $ tree -F --noreport
> .
> |__ test/
> |__ TEST01
>
> $ find . -regex ".*TEST01" -execdir mv '{}' test ;

Cela devrait faire ce que tu veux:

find . -regex ".*TEST01" -execdir mv -t test '{}' ;

ça forcera mv à être en mode « je déplace dans un répertoire » et non
en mode « je renomme »




Bonjour Rémi et merci pour ta réponse. En effet, ça fonctionne mais avec
un message d'erreur tout de même :
________________________________________________________________________
$ find . -regex ".*TEST01" -execdir mv -t test '{}' ;
mv: accès à « test »: Aucun fichier ou dossier de ce type

$ tree -F --noreport
.
└── test/
└── TEST01
________________________________________________________________________
Ce qui me confirme que je ne comprends pas encore très bien comment
« find » fonctionne :p

ceci aussi devrais avoir un effet positif:

find . -regex ".*TEST01" -execdir mv -t test '{}' + ;

en plus cela devrait lancer qu'une fois mv par répertoire (et donc une
fois que find aura regarder le contenu du répertoire, enfin je suppose,
à tester)



ça fonctionne également, avec le même message d'erreur.


L'option -depth de find devrait peut-être amélioré les choses, mais je
n'en suis pas sur....



non, si je reprends ma commande originale en lui ajoutant -depth le
problème est le même.


> $ tree -F --noreport
> .
> |__ test/
> |__ test
> ________________________________________________________________________
>
> Y'aurait-il un aimable collègue sidien dans la salle pour me dire si
> c'est reproductible ?... ou pour m'expliquer la raison de ce
> comportement irritant ? :)

Ça ressemble à un problème de sous spécification: je n'ai pas relus en
complet le man de find, mais rien n'assure que find vas traiter le
contenu des sous répertoire avant le contenu du répertoire courant. Donc
les deux comportement semble possible. Et un changement dans find ou
autre chose à fait passer le comportement réel de l'un à l'autre.



Oui… je vois ce que tu veux dire mais ça ferait de « find » un
utilitaire excessivement délicat à manier… pour ne pas dire bancal.
Alors je vais quand même balancer aux instances buguiennes :)

Merci encore pour l'aide.

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Avatar
debiancbien
On Sun, May 08, 2011 at 03:36:24PM +0200, debiancbien wrote:
On Sun, May 08, 2011 at 09:06:57AM +0200, Rémi Vanicat wrote:
> ceci aussi devrais avoir un effet positif:
>
> find . -regex ".*TEST01" -execdir mv -t test '{}' + ;

ça fonctionne également, avec le même message d'erreur.



Juste une petite correction : il faut écrire
$ find . -regex ".*TEST01" -execdir mv -t test '{}' +
(c'est à dire choisir soit ';' soit '+' pour clore l'instruction)

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/