informations de progression via pv pour la copie du répertoire

14

J'ai besoin de copier un très grand répertoire (en téraoctets ici) et je veux surveiller la progression.

J'ai trouvé que pvc'était un bon utilitaire, mais comment puis-je l'utiliser pour copier des répertoires de manière récursive? ( pv src > dstne fonctionne pas car ce sont des répertoires)

PS: fonctionnant sous OS X Mountain Lion, a pvété installé à partir des ports Mac

FP
la source

Réponses:

21

Utilisation rsync --progress [SRC] [DST]

Vérifiez la man rsyncpage car elle a beaucoup d'options très utiles. -apour l'archivage est un bon début, mais cela dépend de vos besoins exacts.

La copie via un canal ralentira inutilement le processus de copie, surtout s'il s'agit de fichiers.

jippie
la source
Pourquoi la copie via un tube ralentirait-elle le processus? La mise en mémoire tampon fournie par les tuyaux et les tâches multiples associées aux tuyaux sont susceptibles d'aider les choses, je dirais. (et rsync est multi-processus et utilise des tuyaux en interne IIRC). Qu'est-ce qu'un processus de copie qui n'est pas basé sur un fichier?
Stéphane Chazelas
Bash est pratique, mais pas rapide. Surtout lors de la transmission d'une commande à l'autre.
jippie
@StephaneChazelas: Parce que le tampon d'un tuyau ne fait que 8 Ko. Un programme comme rsync pourrait vouloir utiliser un tampon interne beaucoup plus grand.
Zan Lynx
10

Vous pouvez utiliser tarou paxou cpio:

mkdir -p dst &&
  (cd src && tar cf - .) | pv -trb | (cd dst && tar xpf -)
Stéphane Chazelas
la source
1
En outre, vous pouvez ajouter un và la tarcommande pour voir les noms de fichiers.
peterph
Donc, cela compressera le dossier source avant de faire la copie, non? Mon dossier fait 5 To, donc je ne sais pas si c'est la meilleure façon de le faire? J'aime vraiment utiliser pv car il montre un très bon état d'avancement, des conseils s'il vous plaît?
Tak
@Tak, non, il ne zippe rien car il n'y a pas de compression. tar cf -génère un flux contenant les fichiers et leurs métadonnées, qui est alimenté par un tube vers pv qui le transmet intact à l'autre tarlors de l'impression d'une indication de progression, et l'autre tarextrait les données de ce flux. Les trois commandes s'exécutent simultanément et traitent les données au fur et à mesure, il n'y a rien de stocké sur le disque, il n'y a rien de stocké en mémoire autre que les tampons de canal et les tampons internes des commandes qui ne représentent que quelques kilo-octets.
Stéphane Chazelas
@ StéphaneChazelas Merci pour le commentaire. Je l'ai essayé et ça marche, la seule chose est que la barre de progression n'affiche pas le pourcentage attendu de gauche à droite. Une idée pourquoi? J'ai utilisé pv avec ce paramètre -petra qui montre généralement la barre de progression où la barre continuait à se remplir jusqu'à la fin. J'ai également voté pour votre réponse.
Tak
@Tak, pvn'a aucun moyen de savoir combien de données il y a à transférer. Si vous avez une estimation de ce montant, vous pouvez la lui transmettre avec l' -soption (GNU du -sb srcvous donnerait une bonne approximation si les fichiers sont assez volumineux)
Stéphane Chazelas
2

Le goudron.

tar -cf - /var/log/ | pv | tar -C . -x

Exemple:

# tar -cf - /var/log/ | pv | tar -C . -x
tar: Removing leading `/' from member names
58MB 0:00:05 [ 2.2MB/s] [                   <=> 
Une crainte anormale
la source
1

Voici quelques commandes pour copier des répertoires avec des informations de progression.


S'il y a beaucoup de petits fichiers:

cp -av sourcedir targetdir | pv -l -s filecount > logfile

Cela indiquera la progression en fonction du nombre de fichiers copiés.

Vous pouvez rediriger vers /dev/nullsi vous n'en avez pas besoin logfile.

Utilisez la commande suivante pour obtenir filecount:

find sourcedir | wc -l

S'il y a peu de fichiers volumineux:

tar c sourcedir | pv -s size | tar x -C targetdir

Cela rendra compte de la progression en fonction des octets copiés.

targetdir doit exister.

Utilisez la commande suivante pour obtenir size:

du -sh sourcedir

Si vous souhaitez utiliser rsync:

rsync -ai sourcedir/ targetdir/ | pv -l -s filecount > logfile

Obtenez filecountcomme indiqué ci-dessus.

Si vous copiez sur le même système, rsync -ac'est pratiquement la même chose que cp -a. Les avantages de rsync sont lorsque vous copiez sur le réseau ou si vous mettez à jour (ou comparez) une copie précédente.

Voir ici pour plus de détails:

lesmana
la source
0

Vous pouvez faire un du -b /directory/sur la source et la destination pendant qu'une commande de copie normale est en cours et comparer les deux. C'est tout aussi efficace et ne ralentit pas le processus de copie en le poussant à travers un tuyau.

Apôtre
la source
-1
find source-dir -print0 | xargs -0 -I % pv % > dest-dir/%
Christopher Hilla
la source
3
Veuillez expliquer la tournée solutipon, vous voudrez que OP puisse le checo (et apprendre)
vonbrand