Comment puis-je utiliser cp pour copier un répertoire mais ignorer un certain sous-répertoire sous Linux

9

En raison d'un problème de disque dur, j'essaie de déplacer une partition d'un disque dur à un autre. Pour ce faire, je suis http://www.ibm.com/developerworks/library/l-partplan.html article. Dans la partie copie, je voudrais ignorer un sous-répertoire particulier. Comment puis-je accomplir cela en gardant à l'esprit lors de la copie que je dois conserver mon groupe de propriétaires et mon horodatage. Il y a environ 700 Go de données qui doivent être copiées si je n'ignore pas un sous-répertoire particulier.

P Roy
la source

Réponses:

11

rsync -ax --exclude [relative path to directory to exclude] /path/from /path/to

Vous voudrez peut-être (ou non) utiliser --delégalement. Consultez la page de manuel.

Marco Mariani
la source
Oui, ça a fait l'affaire. Cela fonctionne ..
P Roy
2

Normalement, j'utilise cpiocomme suit,

cd source_dir; find . -depth | cpio -pdmv dest_dir

Et comme il s'agit d'un pipeline, vous pouvez placer un "filtre de soustraction" au milieu.

cd sourcedir; find . -depth | grep -v exclude_dir | cpio -pdmv dest_dir

ou vous pouvez diviser cela en plusieurs étapes,

cd source_dir; find . -depth > files.lst
gedit files.lst  # (take out the offending directory and files and save back to files.lst)
cpio -pdmv dest_dir < files.lst

Bien sûr, je testerais cela sur quelque chose de plus petit d'abord, mais vous avez l'idée.

hotei
la source
0

Pouvez-vous déplacer temporairement ( mv) le grand sous-répertoire vers un autre emplacement, faire la copie, puis restaurer le sous-répertoire? Je ne vois pas d'option directe cppour le faire.

Cendre
la source
J'ai aussi vérifié man cp il n'y a aucun moyen d'ignorer l'utilisation de cp. J'ai 550 Go de données dans ce sous-répertoire et mv qui peuvent prendre des heures.
P Roy
J'ai supposé que mv serait une opération relativement peu coûteuse - mettant à jour les références aux données plutôt que de les déplacer physiquement sur le disque. Au moins, j'ai toujours trouvé que les mouvements dans Windows étaient bien plus rapides que les copies - le système de fichiers Linux pouvait fonctionner complètement différemment.
Ash
mv sur le même disque dur est rapide. Mais quand on fait un mv sur des hardisks je pense que ça prend le même temps qu'un cp.
P Roy
Je voulais le déplacer quelque part sur le même disque dur pour le retirer, puis copier le reste sur le disque distant, puis reculer le gros fichier. Sauf si vous copiez le disque entier depuis /.
Ash
0

Solution plutôt moche mais ... pourquoi ne pas simplement tout cp dans le répertoire non récursivement, puis copier les répertoires individuels de manière récursive?

Compagnon Geek
la source
-1

Alors pourquoi pas

cp -Rv [SRC] [DEST] | grep -v [EXCLUDE]
halfcab123
la source