Forum Chasseur d'Images - www.chassimages.com

[ FORUM HARD, SOFT & MICRO Photo ] => ESPACE MICRO - Discussions générales => Discussion démarrée par: un_amateur le Mai 30, 2008, 21:59:57

Titre: copie d'une structure arborescente
Posté par: un_amateur le Mai 30, 2008, 21:59:57
Bonsoir,

Je cherche à copier la structure (VIDE donc SANS le contenu des répertoires) d'un répertoire (qui comporte une ribambelle de sous-répertoires) vers un autre disque dur.
Avez-vous le nom d'un utilitaire qui me permettrait de faire cela ?
Merci par avance.
Titre: Re : copie d'une structure arborescente
Posté par: unbridgesinonrien le Mai 30, 2008, 22:25:55
je pense que les softs de sauvegarde font cela

en restaurant un seul fichier tout au bout de la chaine il va restaurer toute l'arborescence.
Pour des disques réseau il doit aussi maintenir la sécurité et droits accordés aux dossiers
Titre: Re : copie d'une structure arborescente
Posté par: pda le Juin 02, 2008, 10:07:28
Je pense qu'un fichier de commandes d'un simili Linux genre Cygwin permet facilement cela.
Même une installation 'légère' de Cygwin devrait suffire.
Par exemple :
du -k
fournit la liste des répertoires (précédés par leur taille).
Ensuite, une boucle sur les noms xxx obtenus suivis d'un simple
mkdir -p $xxx
permet de dupliquer l'arborescence.

S'il faut conserver les dates je conseillerai l'utilisation de
tar
(une fois en création d'un fichier .tar, une fois en extraction).
Cygwin est un peu lourd à installer, mais ensuite il permet des commandes de "différences" entre arborescences, bien pratiques pour vérifier que le contenu d'un CD/DVD gravé correspond bien à l'arborescence d'origine.
Titre: Python à la rescousse
Posté par: feraudy le Juin 02, 2008, 13:19:43
le langage Python permet d'écrire un script qui résoud votre problème. On peut le télécharger sur www.python.org.
Voici une démonstration de la solution de votre problème
#copy_empty_dir_structure.py
import os.path
import os

def make_corresponding_dir(arg, current_dir, entries):
    target_root_dir,source_root_dir_len=arg
    os.mkdir(os.path.join(target_root_dir+current_dir[source_root_dir_len:]))
def copy_empty_dir_structure(source_root_dir, target_root_dir):
    source_root_dir_len = len(source_root_dir)
    arg = (target_root_dir, source_root_dir_len)
    os.path.walk(source_root_dir,make_corresponding_dir, arg)
#demo
copy_empty_dir_structure(r"c:\Windows\\",r"c:\WindowsBis\\")
Titre: Re : copie d'une structure arborescente
Posté par: mickey le Juin 02, 2008, 18:42:50
Si tu es sous Windows, il n'y a aucune difficulté pour simplement copier une structure arborescente vide. Tu utilises les commandes classiques "Copier" et "Coller"  sur le répertoire le plus élevé depuis l'explorateur.

Si tu veux des fonctions plus sophistiquées, effectivement il te faudra un utilitaire ; mais là je ne sais pas lequel.

Cordialement,

Mickey
Titre: Re : Re : copie d'une structure arborescente
Posté par: unbridgesinonrien le Juin 02, 2008, 19:53:45
Citation de: mickey le Juin 02, 2008, 18:42:50
Si tu es sous Windows, il n'y a aucune difficulté pour simplement copier une structure arborescente vide. Tu utilises les commandes classiques "Copier" et "Coller"  sur le répertoire le plus élevé depuis l'explorateur.

Le but ici est de copier l'arborescence des dossiers "pleins" en une arborescence "vide" et donc le simple copier /coller ne va pas
Titre: Re : copie d'une structure arborescente
Posté par: Romain le Juin 03, 2008, 08:15:31
Tout simplement avec une commande DOS dans l'invite de commande windows :
md c:\bla\blabla\blablabla
Titre: Re : copie d'une structure arborescente
Posté par: unbridgesinonrien le Juin 03, 2008, 08:23:35
oui mais qui est ce qui tape au clavier  "bla\blabla\blablabla"  ???
Titre: Re : copie d'une structure arborescente
Posté par: un_amateur le Juin 03, 2008, 08:40:45
merci pour vos réponses ... mais .... aucune ne me convient!
1) certines commandes données ne fonctionnent pas pour mon cas (C'est une copie automatique de tous les répertoires SANS leur contenu.. Exemple : la dernière commande -md-créée un répertoire mais pas la recopie de tous les répertoires.
2) Je suis sous windows XP et je cherche un utilitaire (ou si quelqu'un à un batch -un .bat- Dos à passer.

En tout cas merci quand même à ceux qui ont eu la gentillesse de me répondre
Titre: Re : copie d'une structure arborescente
Posté par: pda le Juin 03, 2008, 10:06:05
Quelques précisions :
Cygwin n'est pas un OS, il s'installe sous Windows (XP par exemple) et permet de taper des commandes type Linux dans une fenêtre DOS.
Une autre possibilité pour la recherche est "find -type d"

Sinon le conseil de Feraudy est intéressant, car Python est puissant, largement plus que DOS et peut s'installer sous presque tous les OS. Je ne sais pas programmer en Python, mais un tel programme pourra tourner sous DOS, Linux, probablement MacOS, ... donc pourquoi se priver ?
Titre: Re : copie d'une structure arborescente
Posté par: Cedric_g le Juin 03, 2008, 14:03:47
Bonjour

Un petit script VBScript, fait vite fait sur le gaz (un peu à l'arrache j'en conviens !)

(à enregistrer avec l'extension .vbs et à exécuter depuis l'explorateur, après avoir modifié les variables stRep et stDest)
CitationDim oFSO,oFld

Set oFSO = CreateObject("Scripting.FileSystemObject")

stRep = "C:\Arborescence"
stDest = "D:\"

CopierRepertoires stRep, stDest, 1

MsgBox "Copie terminée !"
Sub CopierRepertoires(stSource, stDestination, boolBase)

   Dim oNewFld, oFldDest

   Set oFldDest = oFSO.GetFolder(stDestination)
   
   'Copie du répertoire source le cas échéant
   If boolBase<>0 Then
      If Not oFSO.FolderExists(stDestination & oFSO.GetFolder(stSource).Name) Then
         Set oNewFld = oFldDest.subFolders.Add(oFSO.GetFolder(stSource).Name)
         Set oFldDest = oFSO.GetFolder(oNewFld.Path)
      End If
   End If

   If oFSO.FolderExists(stSource) Then
      For each oFld in oFSO.GetFolder(stSource).SubFolders
         Set oNewFld = oFldDest.subFolders.Add(oFld.Name)
         If oFld.SubFolders.Count>0 Then
            'Récursivité
            CopierRepertoires oFld.Path, oNewFld.Path, 0
         End If
      Next
   End If

End Sub
Y'a mieux mais c'est plus cher   ;)
Titre: Re : copie d'une structure arborescente
Posté par: unbridgesinonrien le Juin 03, 2008, 14:12:36
aller , la soluce :

sous invite de commande DOS

xcopy c:\origine c:\destination /t/e

te recopie une arborescence vide dans "destination" telle que trouvée dans "origine"
Titre: Re : copie d'une structure arborescente
Posté par: Cedric_g le Juin 03, 2008, 14:16:18
Arg

Je savais bien qu'il existait un truc sous DOS mais impossible de m'en souvenir  :D

Le fameux XCOPY !!!
(à force de faire des petits outils pour mes collègues admin réseau, j'en viens à recréer des trucs existants... La preuve ici !)
Titre: Re : copie d'une structure arborescente
Posté par: un_amateur le Juin 03, 2008, 20:08:24
+1 Cedric. J'avais moi aussi oublié cette commande xcopy.
Ouh là là comme on oublie vite le dos qui avait quand m^me de commande sympa! la preuve  et un grand merci à unbridge de nous avoir raffraichi la mémoire et donner la solution;
Merci à tous !