fusionner des arborescences
Le
mpg
Bonjour,
Je me prends la tête depuis un certain temps sur un problème
vraisemblablement tout con, mais je n'arrive vraiment pas à y voir clair
donc je viens demander votre aide. J'ai plusieurs arborescences comme ça :
./root1/a/A/alpha1
. . /beta1
. /B/gamma1
. /delta1
/b/C/epsilon1
avec root2, root3, etc. contenant chacun des sous-répertoires a, a/A, a/B,
etc. que je souhaite fusionner de la façon suivante : newroot doit contenir
les mêmes sous répertoires a, a/A, a/B et newroot/a/A/ doit contenir
alpha1, beta1, alpha2, beta2, etc.
Je ne sais pas si je suis très clair, je peux essayer de l'être plus si ça
ne va pas.
J'essaie de la façon, visiblement naïve, suivante :
mv root1/a newroot # ok
mv root1/b newroot # ok aussi
mv root2/a newroot # BOUM !
avec BOUM qui ressemble au message d'erreur suivant :
mv: ne peut déplacer `root1/a' vers un sous-répertoire de lui-même
`newroot/a'
Bon, alors moi j'y comprends rien parce d'une j'ai pas demandé de déplacer
vers newroot/a mais vers newroot, et puis c'est pas un sous-répertoire du
répertoire initial.
Je que je conçois, c'est que le fait que newroot/a existe déjà la deuxième
fois et que c'est visiblement ça qui perturbe mv, mais je fais pas le lien
avec le message d'erreur d'un part, et d'autre part je vois pas comment m'y
prendre pour que ça marche.
Merci d'avance pour toute aide, je vais (re-)lire la page d'info de mv mais
j'ai peu d'espoir. Au fait, j'utilise GNU mv 6.10 si ça a la moindre
importance.
Manuel.
Je me prends la tête depuis un certain temps sur un problème
vraisemblablement tout con, mais je n'arrive vraiment pas à y voir clair
donc je viens demander votre aide. J'ai plusieurs arborescences comme ça :
./root1/a/A/alpha1
. . /beta1
. /B/gamma1
. /delta1
/b/C/epsilon1
avec root2, root3, etc. contenant chacun des sous-répertoires a, a/A, a/B,
etc. que je souhaite fusionner de la façon suivante : newroot doit contenir
les mêmes sous répertoires a, a/A, a/B et newroot/a/A/ doit contenir
alpha1, beta1, alpha2, beta2, etc.
Je ne sais pas si je suis très clair, je peux essayer de l'être plus si ça
ne va pas.
J'essaie de la façon, visiblement naïve, suivante :
mv root1/a newroot # ok
mv root1/b newroot # ok aussi
mv root2/a newroot # BOUM !
avec BOUM qui ressemble au message d'erreur suivant :
mv: ne peut déplacer `root1/a' vers un sous-répertoire de lui-même
`newroot/a'
Bon, alors moi j'y comprends rien parce d'une j'ai pas demandé de déplacer
vers newroot/a mais vers newroot, et puis c'est pas un sous-répertoire du
répertoire initial.
Je que je conçois, c'est que le fait que newroot/a existe déjà la deuxième
fois et que c'est visiblement ça qui perturbe mv, mais je fais pas le lien
avec le message d'erreur d'un part, et d'autre part je vois pas comment m'y
prendre pour que ça marche.
Merci d'avance pour toute aide, je vais (re-)lire la page d'info de mv mais
j'ai peu d'espoir. Au fait, j'utilise GNU mv 6.10 si ça a la moindre
importance.
Manuel.

Poser une question


--
Stéphane
ou peut-être
rsync -auv --remove-source-files root[1-9]/ newroot/
--
Jacques L'helgoualc'h
comme dit Stéphane...
via cpio :
mkdir /newroot
cd /root1; find . | cpio -pdml /newroot
cd /root2; find . | cpio -pdml /newroot
...
alternative, via pax :
mkdir /newroot
cd /root1; pax -rwl -p e . /newroot
cd /root2; pax -rwl -p e . /newroot
...
le -l, c'est pour linker les fichiers plutôt que les copier, ce qui
accélère grandement les choses, le tout suivi d'un : rm -rf /root?
Cordialement,
Cyrille Lefevre.
--
mailto:Cyrille.Lefevre-news%
supprimer "%nospam% et ".invalid" pour me repondre.
Par curiosité, j'aimerais quand même bien comprendre ce qui n'allait pas
dans ma tentative avec mv : j'avais toujours cru que mv était équivalent à
cp && rm, visiblement pas trop. J'en prends acte, mais si je comprenais le
message d'erreur, ça me ferait plaisir...
Manuel.
Bonjour,
reprend tes cours unix, c'est une histoire de link/unlink en tant
qu'appelle système, voir même rename sur les os réçent.
Cordialement,
Cyrille Lefevre.
--
mailto:Cyrille.Lefevre-news%
supprimer "%nospam% et ".invalid" pour me repondre.