Existe-t-il un moyen de copier un répertoire entier, mais uniquement les dossiers? J'ai un fichier corrompu quelque part dans mon répertoire, ce qui provoque l'échec de mes disques durs.
Donc, au lieu de copier le fichier corrompu sur un autre disque dur, je voulais simplement copier les dossiers, car j'ai des scripts qui recherchent des centaines de dossiers, et je ne veux pas avoir à les créer manuellement tous.
J'ai cherché dans le manuel de cp, mais je n'ai rien vu (je l'ai peut-être manqué)
Disons que j'ai cette structure sur mon disque dur défaillant:
dir1
files
dir2
files
files
dir4
dir3
files
Tout ce que je veux, c'est la structure du répertoire, pas de fichiers du tout.
Je me retrouverais donc avec le nouveau disque dur:
dir1
dir2
dir4
dir3
En espérant que quelqu'un connaisse quelques astuces!
rsync
copiez la structure du répertoire ET conservez les autorisations et les attributs] ( stackoverflow.com/a/9242883/52074 ). L'utilisation de plainmkdir -p
ne préserve pas les autorisations et les attributs .Réponses:
Si vous souhaitez mettre en miroir un squelette de répertoire et ne copier aucun fichier:
Que se passe t-il ici:
-links 2
pour trouver les répertoires les plus profonds possibles .mkdir -p
fera tous les répertoires manquants en cours de route.Je l'ai fait comme ça plutôt que
find -type d -exec mkdir -p "/path/to/backup/{}" \;
parce que ça va couper tout un tas d'mkdir
appels. Nous pouvons rapidement le prouver avec un petit test. Voici l'arbre de test suivi de ce que j'ai exécuté pour comparer les deux commandes:Et cela ne fera que s'améliorer dans une solution réelle avec des milliers de répertoires.
la source
find
utilise le répertoire de travail actuel comme point de départ. Si vous souhaitez utiliser un autre chemin, utilisez la syntaxe:find /path/to/search/ -type.....
find -type d -exec mkdir -p "/media/jinglez/TVSeries/TV Series"/{}" \;
et tout devrait bien se passer ? Cela semble prendre du temps: /find -type d -links 2 -exec mkdir -p "/media/jinglez/TVSeries/TV Series/{}" \;
Assez facile à faire avec python one-liner:
En tant que script, cela pourrait être réécrit comme suit:
la source