Comment puis-je faire une barre de progression en copiant un répertoire avec cp?

je suppose que je pourrais comparer le nombre de fichiers dans le répertoire source au nombre de fichiers dans le répertoire cible à mesure que cp progresse, ou peut-être le faire avec la taille du dossier à la place? J'ai essayé de trouver des exemples, mais toutes les barres de progression bash semblent être écrites pour copier des fichiers simples. Je veux copier un tas de fichiers (ou un répertoire, si le ex n'est pas possible).

43
demandé sur codeforester 2011-08-20 03:59:06

10 réponses

vous pouvez aussi utiliser rsync au lieu de cp comme ceci:

rsync -Pa source destination

ce qui vous donnera une barre de progression et le temps estimé d'achèvement. Très pratique.

52
répondu SteveLambert 2016-12-14 18:24:33

pour afficher une barre de progression en faisant une copie récursive de fichiers & dossiers & sous-dossiers (y compris les liens et les attributs de fichier), vous pouvez utiliser gcp (facilement installé dans Ubuntu et Debian en lançant "sudo apt-get install gcp"):

gcp -rf SRC DEST

Voici la sortie typique en copiant un grand dossier de fichiers:

Copying 1.33 GiB  73% |#####################      | 230.19 M/s ETA:  00:00:07

Notez qu'il montre une barre de progression pour l'ensemble de l'opération, alors que, si vous ne voulez qu'une seule barre de progression par fichier, vous pouvez utiliser rsync:

rsync -ah --progress SRC DEST
21
répondu Shervin Emami 2013-11-26 15:38:11

Vous pouvez avoir un coup d'oeil à l'outil vcp. C'est un outil de copie simple avec deux barres de progression: Une pour le fichier courant, et une pour l'ensemble.

EDIT

Voici le lien vers les sources: http://members.iinet.net.au/~lynx/pcv/ Page de manuel peut être trouvé ici: http://linux.die.net/man/1/vcp

la Plupart des distributions ont un paquet.

7
répondu Thomas Berger 2011-08-20 01:32:50
bar

Vous pourriez l'appeler comme ceci:

#!/bin/bash
filesize=$(du -sb  | awk '{ print  }')
tar -cf - -C  ./ | bar --size ${filesize} | tar -xf - -C 

vous devez aller au-dessus de tar, et il sera inexact sur les petits fichiers. Vous devez aussi vous assurer que le répertoire cible existe. Mais c'est une façon.

4
répondu Thomas Berger 2011-08-20 00:47:55

simple unix moyen est d'aller vers le répertoire de destination et ne watch -n 5 du -s. Peut-être le rendre plus joli en le montrant comme un bar . Cela peut aider dans les environnements où vous avez juste les utilités unix standard et aucune portée d'installation de fichiers supplémentaires . du-sh est la clé , la montre est de faire toutes les 5 secondes. Pros: fonctionne sur n'importe quel système unix Cons : Pas De Barre De Progression

2
répondu Nishant 2014-01-12 21:48:29

Il y a un outil pv pour faire cette chose exacte: http://www.ivarch.com/programs/pv.shtml

Il y a une version ubuntu dans apt

1
répondu Foo Bah 2011-08-21 01:39:39

Mon option préférée est Version Avancée, car il utilise l'original cp fichiers sources.

$ wget http://ftp.gnu.org/gnu/coreutils/coreutils-8.21.tar.xz
$ tar xvJf coreutils-8.21.tar.xz
$ cd coreutils-8.21/
$ wget --no-check-certificate https://raw.githubusercontent.com/atdt/advcpmv/master/advcpmv-0.5-8.21.patch
$ patch -p1 -i advcpmv-0.5-8.21.patch
$ ./configure
$ make

Les nouveaux programmes sont maintenant situés dans src/cp src/mv. Vous pouvez choisir de remplacer vos commandes existantes:

$ sudo cp src/cp /usr/local/bin/cp
$ sudo cp src/mv /usr/local/bin/mv
1
répondu elboletaire 2017-02-08 22:23:22

Que Diriez-vous de quelque chose comme

find . -type f | pv -s $(find . -type f | wc -c) | xargs -i cp {} --parents /DEST/$(dirname {})

il trouve tous les fichiers dans le répertoire courant, pipes qui à travers PV tout en donnant à PV une taille estimée de sorte que le compteur de progression fonctionne et ensuite piping que vers une commande CP avec le drapeau --parents de sorte que le chemin de Last correspond au chemin SRC.

un problème que je n'ai pas encore résolu est que si vous émettez cette commande

find /home/user/test -type f | pv -s $(find . -type f | wc -c) | xargs -i cp {} --parents /www/test/$(dirname {})

le chemin de destination devient / www/test/home/user/test/....FICHIER... et je ne sais pas comment dites la commande pour enlever le "/home/user/test' partie. C'est pourquoi je dois l'exécuter depuis le répertoire SRC.

0
répondu Ken Brill 2017-02-28 03:03:08

Pour ajouter une autre option, vous pouvez utiliser cpv. Il utilise pv pour imiter l'utilisation de cp.

Il fonctionne comme pv mais vous pouvez l'utiliser pour recursively copier des répertoires

enter image description here

Vous pouvez l'obtenir ici

0
répondu nachoparker 2017-09-14 07:43:53

Vérifier le code source progress_bar_ dans le dépôt git de mine

https://github.com/Kiran-Bose/supreme

essayez aussi le paquet personnalisé bash scriptsuprême pour vérifier comment la barre de progression fonctionne avec cp et mv comands

aperçu des fonctionnalités

(1)Les Applications Ouvertes ----Firefox ----Calculatrice ----Les paramètres

(2)Gérer Fichier ----Rechercher ----Naviguer ----Accès rapide

            |----Select File(s)
            |----Inverse Selection
            |----Make directory
            |----Make file
                                          |----Open
                                          |----Copy
                                          |----Move
                                          |----Delete
                                          |----Rename
                                          |----Send to Device
                                          |----Properties

(3)Gérer Le Téléphone ----Déplacer/Copier du téléphone ---- Déplacer/copier au téléphone ----Synchroniser des dossiers

(4)Gérer USB ---- Déplacement / copie à partir de L'USB ----Déplacer/Copier USB

0
répondu KIRAN B 2018-09-11 05:38:20