problème « find -execdir mv » sous Sid

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Rémi Vanicat
Le #23343631
debiancbien
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/
debiancbien
Le #23344621
On Sun, May 08, 2011 at 09:06:57AM +0200, Rémi Vanicat wrote:
debiancbien
> 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/
debiancbien
Le #23344641
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/
Publicité
Poster une réponse
Anonyme