copie d'une structure arborescente

Démarré par un_amateur, Mai 30, 2008, 21:59:57

« précédent - suivant »

un_amateur

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.

unbridgesinonrien

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

pda

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.

feraudy

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\\")

mickey

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

unbridgesinonrien

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

Romain

Tout simplement avec une commande DOS dans l'invite de commande windows :
md c:\bla\blabla\blablabla

unbridgesinonrien

oui mais qui est ce qui tape au clavier  "bla\blabla\blablabla"  ???

un_amateur

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

pda

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 ?

Cedric_g

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   ;)

unbridgesinonrien

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"

Cedric_g

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 !)

un_amateur

+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 !