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).
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.
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
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.
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.
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
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
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
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.
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
Vous pouvez l'obtenir ici
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