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

fusionner des arborescences

7 réponses
Avatar
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.

7 réponses

Avatar
Stephane CHAZELAS
Essaie pax ou cpio + rm -r pour deplacer des arborescences.

--
Stéphane
Avatar
Jacques L'helgoualc'h
Le 23-05-2008, Stephane a écrit :
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

Avatar
Cyrille Lefevre
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.

Avatar
mpg
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.

Avatar
Cyrille Lefevre
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.

Avatar
mpg
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.

Avatar
Cyrille Lefevre
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.