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.
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
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.
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\\")
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
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
Tout simplement avec une commande DOS dans l'invite de commande windows :
md c:\bla\blabla\blablabla
oui mais qui est ce qui tape au clavier "bla\blabla\blablabla" ???
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
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 ?
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 ;)
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"
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 !)
+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 !