Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1031 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [Shell/sh] Parcours recursif de répertoire et création de liens

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Shell/sh] Parcours recursif de répertoire et création de liens

n°1961040
itou
Posté le 28-01-2010 à 00:06:26  profilanswer
 

Bonjour,
 
Je tente de mettre en place une structure de répertoire ayant des liens symbolique d'une autre même structure de répertoire d'un autre dossier :
càd que j'ai au départ :
 
parent1
-------dossier1
---------------sous_dossier1
-------dossier2
-------dossier3
---------------sous_dossier3
 
 
parent2
-------dossier1
---------------sous_dossier1
-------dossier2
-------dossier3
---------------sous_dossier3
 
ce que je voudrais faire dans le "parent2" :
 
parent2
-------dossier1
-------lien_sur_parent1_dossier1
---------------sous_dossier1
---------------lien_sur_parent1_dossier1_sous_dossier1
-------dossier2
-------lien_sur_parent1_dossier2
-------dossier3
-------lien_sur_parent1_dossier3
---------------sous_dossier3
---------------lien_sur_parent1_dossier3_sous_dossier3
 
Je compte faire ça en PHP mais il me semblerait qu'on pourrait le faire en shell (linux bash sh).
Quelqu'un pourrait me donner un script de départ ?
est-ce qu'un find est bien approprié ?
Le but aussi c'est que plus tard, si je rajoute des dossier dans parent1 (et bien sur dans parent2), le script ne recrée que les liens manquants.
 
Merci.


Message édité par itou le 05-08-2011 à 09:55:48
mood
Publicité
Posté le 28-01-2010 à 00:06:26  profilanswer
 

n°1961318
itou
Posté le 28-01-2010 à 17:13:20  profilanswer
 

Bon,
j'ai finalement fait le script en PHP.
mais si y'en a qui veulent tenter le script shell, je ne refuse pas.

n°1961326
pataluc
Posté le 28-01-2010 à 17:18:13  profilanswer
 

ca doit se faire oui... (un truc a base de find, de test et de mkdir)
 
c'est quoi le but fonctionnel? parce que la je vois pas trop, mais je pense que ca peut aider à trouver une solution intelligente.

n°1961730
Sve@r
Posté le 31-01-2010 à 12:19:34  profilanswer
 

itou a écrit :

Bon,
j'ai finalement fait le script en PHP.
mais si y'en a qui veulent tenter le script shell, je ne refuse pas.


http://fr.lang.free.fr/cours/Shell_v2.0.pdf page 72


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°2093368
itou
Posté le 04-08-2011 à 18:29:56  profilanswer
 

Bonjour,
je redéterre ce topic car ma fonction php ne marche plus sur certain serveur.
Je reviens donc sur un script shell ou plus simplement sur une seule ligne de commande :
 
Je commence donc ainsi :
cd parent2
find -type d | xargs -0 echo ...
 
ça me liste donc que les répertoire et renvoi le nom du répertoire à echo pour les affichier.
de là, il me faudrait donc faire un ln -s /parent1/[argument de xargs] /parent2[argument de xargs]/[nomdu lien]
 
mais comment faire ?
merci

n°2093402
art_dupond
je suis neuneu... oui oui !!
Posté le 04-08-2011 à 22:26:52  profilanswer
 

pour [argument de xargs] : xargs -i
 
find -type d | xargs -n1  -i{} ln -s /parent1/{} /parent2/{}/[nomdu lien]  
 
 
 


---------------
oui oui
n°2093405
itou
Posté le 04-08-2011 à 22:57:23  profilanswer
 

ah merci, c'est presque ça, j'avais cherché à comprendre le -i{} sans succes. Je vois maintenant comment ça fonctionne.
Bon pour mon truc c'est presque bon, faut juste que j'arrive à enlever le "."
 
find -type d | xargs -n1 -t -i{} ln -s /parent1{} /parent2{}/[nomdu lien]  
me donne  
ln -s /parent1./dossier1 /parent2./dossier1/lien_sur_parent1
 
edit: ok je pense avoir trouvé :
 
cd parent1
find -type d | cut -c2- | xargs -n1 -t -i{} ln -s /parent2{} /parent1{}/[nomdu lien]
 
 
Edit 2 : aarrgh, cette commande ne peut pas se relancer deux fois : ça fait des liens sur des liens à ne plus en finir !!!  tester s'il y a déjà le lien dans le répertoire ? comment faire ?
merci


Message édité par itou le 05-08-2011 à 09:54:35
n°2093732
itou
Posté le 06-08-2011 à 23:52:49  profilanswer
 

ok,
j'ai fini par passer par un script bash.
 
------------------
for f in `find -type d | cut -c2-`
do
 echo -e "\nrepertoire : $f"  
 if [ -d ".$f/lien" ]
 then
  echo "Liens existent"
 else
  echo "creation de lien vers /parent2$f"
  ln -s /parent2$f /parent1$f/lien
 fi
done
---------------------------


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [Shell/sh] Parcours recursif de répertoire et création de liens

 

Sujets relatifs
outils de test pour un bon développeur !!!plannification des taches apache [pour test sur windows != CRON]]
[SHELL] Connexion base DB2 + lancement requête dans fichier .sql[SHELL] Ajouter une chaine de caractère particulière dans un fichier
Parcours matrice.[SHELL] récuperer les nieme caract. dans des chaine obtenue par | grep
[SHELL] Une histoire "pipe"test d'un retour de la commande for /f vide
utilisation de mysql dans un shell linuxéditeur PHP test programme
Plus de sujets relatifs à : [Shell/sh] Parcours recursif de répertoire et création de liens


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR