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.
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
Stephane CHAZELAS
Le #6692811
Essaie pax ou cpio + rm -r pour deplacer des arborescences.

--
Stéphane
Jacques L'helgoualc'h
Le #6693231
Le 23-05-2008, Stephane
Essaie pax ou cpio + rm -r pour deplacer des arborescences.


ou peut-être

rsync -auv --remove-source-files root[1-9]/ newroot/

--
Jacques L'helgoualc'h

Cyrille Lefevre
Le #6708521
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êm e
`newroot/a'


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.

mpg
Le #6722651
Le (on) lundi 26 mai 2008 11:56, Cyrille Lefevre a écrit (wrote) :

comme dit Stéphane...

via cpio :
[...]
alternative, via pax :

Ok, merci à tous les trois, ça marche parfaitement.


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.

Cyrille Lefevre
Le #6727541
Le (on) lundi 26 mai 2008 11:56, Cyrille Lefevre a écrit (wrote) :

Par curiosité, j'aimerais quand même bien comprendre ce qui n'allai t pas
dans ma tentative avec mv : j'avais toujours cru que mv était équiv alent à
cp && rm, visiblement pas trop. J'en prends acte, mais si je comprenais le
message d'erreur, ça me ferait plaisir...


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.

mpg
Le #6734911
Le (on) jeudi 29 mai 2008 03:28, Cyrille Lefevre a écrit (wrote) :

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.

Euh... j'ai jamais eu de cours Unix (malheureusement). Si ce n'est pas trop

long à expliquer, ça m'intéresse bien, s'il y a des bonnes ressources en
lignes qui expliquent ce point sans avoir besoin de lie les 300 pages
précédentes, je prends aussi (je prendrais bien aussi des références
papier, mais mon budget est limité à ma pile à lire un peu trop grande en
ce moment).

Merci d'avance,
Manuel.

Cyrille Lefevre
Le #6743051
Le (on) jeudi 29 mai 2008 03:28, Cyrille Lefevre a écrit (wrote) :

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.

Euh... j'ai jamais eu de cours Unix (malheureusement). Si ce n'est pas trop

long à expliquer, ça m'intéresse bien, s'il y a des bonnes ressou rces en
lignes qui expliquent ce point sans avoir besoin de lie les 300 pages
précédentes, je prends aussi (je prendrais bien aussi des référ ences
papier, mais mon budget est limité à ma pile à lire un peu trop g rande en
ce moment).


Bonjour,

pour faire simple, les appels système link et rename ne peuvent pas
déplacer un répertoire si la cible est un répertoire existant et no n
vide et ni la commande mv ni l'appel système rename n'ont d'intelligenc e
pour déplacer les fichiers du répertoire source sur le répertoire c ible.

pour mémoire, mv tente de supprimer la cible avant de déplacer la
source, dans le cas d'un fichier, c'est au travers de l'appel système
unlink et dans le cas d'un répertoire, de l'appel système rmdir, s'il
n'est pas vide, l'appel système n'aboutit pas.

cf man link(2), rename(2), unlink(2), rmdir(2) et bien sur mv(1) pour
plus de détails.

Cordialement,

Cyrille Lefevre.
--
mailto:Cyrille.Lefevre-news%
supprimer "%nospam% et ".invalid" pour me repondre.
remove "%nospam" and ".invalid" to answer me.


Publicité
Poster une réponse
Anonyme