Je souhaite créer un clone de la structure de notre serveur de fichiers de plusieurs téraoctets. Je sais que cp --parents peut déplacer un fichier et sa structure parent, mais existe-t-il un moyen de copier la structure de répertoire intacte?
Je veux copier sur un système Linux et notre serveur de fichiers est monté sur CIFS.
Réponses:
Vous pouvez faire quelque chose comme:
pour créer la liste des répertoires, puis
pour créer les répertoires sur la destination.
la source
find . -type d -print0 >dirs.txt
etxargs -0 mkdir -p <dirs.txt
. Cela amènera les deux commandes à utiliser des valeurs nulles comme séparateurs au lieu d'espaces.xargs
peut dépasser la longueur de commande maximale du système lorsque vous commencez à traiter des commandes de centaines ou de milliers, alors utilisez-le avec prudence. (Trouvez la limite de longueur de commande avecgetconf ARG_MAX
.) Avec beaucoup de répertoires, vous devrez peut-être écrire un script pour parcourir la sortie à la place.la source
rsync
solution de la réponse de Chen Levy dans cette question SO--
est un terminateur d'option d'utilitaire GNU standard. Cela signifie "hé mkdir, tout argument après ceci, ce n'est pas un drapeau, alors traitez-le comme un argument de fichier, même s'il commence par un caractère '-'."Voici une solution simple utilisant rsync:
J'ai trouvé cette solution là-bas
la source
rsync -a --include '*/' --exclude '*' "$source" "$target"
Je ne sais pas si vous cherchez une solution sous Linux. Si c'est le cas, vous pouvez essayer ceci:
la source
Ceci copie les répertoires et les attributs des fichiers, mais pas les données des fichiers:
Ensuite, vous pouvez supprimer les attributs des fichiers si cela ne vous intéresse pas:
la source
La solution suivante a bien fonctionné pour moi dans divers environnements:
la source
Cela marche:
Remplacez simplement SOURCE_DIR et DEST_DIR.
la source
Cela résout même le problème des espaces blancs:
Dans le répertoire d'origine / source:
puis recréez-le dans le répertoire nouvellement créé:
la source
Remplacez
target_dir
etsource_dir
avec les valeurs appropriées:Testé sur OSX + Ubuntu.
la source
Un script python de Sergiy Kolodyazhnyy publié sur Copier uniquement les dossiers et non les fichiers? :
ou de la coque:
FYI:
la source
Une autre approche consiste à utiliser le
tree
qui est assez pratique et à naviguer dans les arborescences de répertoires en fonction de ses options fortes. Il existe des options pour le répertoire uniquement, exclure les répertoires vides, exclure les noms avec motif, inclure uniquement les noms avec motif, etc.man tree
Avantage : vous pouvez éditer ou revoir la liste, ou si vous faites beaucoup de scripts et créez fréquemment un lot de répertoires vides
Approche : créez une liste de répertoires en utilisant
tree
, utilisez cette liste comme entrée d'arguments pourmkdir
-dfi
liste uniquement les répertoires, imprime le chemin complet de chaque nom, empêche l'arborescence d'imprimer les lignes d'indentation,--noreport
Omet l'impression du rapport de fichier et de répertoire à la fin de la liste de l'arborescence, juste pour que le fichier de sortie ne contienne pas de peluchesEnsuite, allez à la destination où vous voulez les répertoires vides et exécutez
la source
Copier le répertoire uniquement avec l'autorisation et la propriété associées
la source
Solution 1 ligne:
la source
Si vous pouvez accéder à partir d'une machine Windows, vous pouvez utiliser xcopy avec / T et / E pour copier uniquement la structure des dossiers (le / E inclut les dossiers vides)
http://ss64.com/nt/xcopy.html
[ÉDITER!]
Celui-ci utilise rsync pour recréer la structure des répertoires mais sans les fichiers. http://psung.blogspot.com/2008/05/copying-directory-trees-with-rsync.html
Ça pourrait être mieux :)
la source
Voici une solution en php qui:
Créez un fichier comme
syncDirs.php
avec ce contenu:Exécutez-le en tant qu'utilisateur disposant de suffisamment de droits:
sudo php syncDirs.php /var/source /var/destination
la source