Je suppose que je pourrais comparer le nombre de fichiers du répertoire source au nombre de fichiers du répertoire cible au fur et à mesure de la progression de cp, ou peut-être le faire plutôt avec la taille du dossier? J'ai essayé de trouver des exemples, mais toutes les barres de progression semblent être écrites pour la copie de fichiers individuels. Je veux copier un tas de fichiers (ou un répertoire, si le premier n'est pas possible).
Vous pouvez également utiliser rsync
au lieu de cp
comme ceci:
rsync -Pa source destination
Ce qui vous donnera une barre de progression et l'heure estimée d'achèvement. Très utile.
Pour afficher une barre de progression lors d’une copie récursive de fichiers & dossiers & sous-dossiers (y compris les liens et les attributs de fichiers), vous pouvez utiliser gcp
(facilement installé dans Ubuntu et Debian en exécutant "Sudo apt-get install gcp"):
gcp -rf SRC DEST
Voici la sortie typique lors de la copie d'un grand dossier de fichiers:
Copying 1.33 GiB 73% |##################### | 230.19 M/s ETA: 00:00:07
Notez qu’elle affiche une seule barre de progression pour l’ensemble de l’opération. Si vous souhaitez une seule barre de progression par fichier, vous pouvez utiliser rsync
:
rsync -ah --progress SRC DEST
Vous pouvez consulter l'outil vcp
. C'est un simple outil de copie avec deux barres de progression: une pour le fichier actuel et une pour l'ensemble.
MODIFIER
Voici le lien vers les sources: http://members.iinet.net.au/~lynx/vcp/ La page de manuel est disponible ici: http://linux.die.net/ man/1/vcp
La plupart des distributions ont un paquet pour cela.
Voici une autre solution: Utilisez l'outil bar
Vous pouvez l'invoquer comme ceci:
#!/bin/bash
filesize=$(du -sb ${1} | awk '{ print $1 }')
tar -cf - -C ${1} ./ | bar --size ${filesize} | tar -xf - -C ${2}
Vous devez suivre le chemin sur tar, et ce sera inexact sur les petits fichiers Aussi, vous devez vous assurer que le répertoire cible existe. Mais c'est un moyen.
Un simple unix way consiste à aller dans le répertoire de destination et à faire watch -n 5 du -s
. Peut-être le rendre plus joli en se présentant comme un bar. Cela peut aider dans les environnements où vous n’avez que les utilitaires Unix standard et n’avez aucune possibilité d’installer des fichiers supplémentaires. du-sh est la clé, il suffit de regarder toutes les 5 secondes. Pour : Fonctionne sur tous les systèmes Unix Contre : Pas de barre de progression
Mon option préférée est Advanced Copy , car il utilise les fichiers source cp
d'origine.
$ 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 et 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
Il existe un outil pv
pour effectuer cette opération: http://www.ivarch.com/programs/pv.shtml
Il y a une version d'ubuntu dans apt
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 du répertoire en cours, les acheminant via PV tout en donnant à PV une taille estimée afin que l'indicateur de progression fonctionne, puis en transmettant ces informations à une commande CP avec l'indicateur --parents afin que le chemin DEST corresponde au chemin SRC.
Un problème que je n’ai pas encore résolu est que si vous exécutez 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/utilisateur/test/.... FICHIERS ... et je ne sais pas comment dire à la commande de se débarrasser de la partie "/ home/utilisateur/test". 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
.
Cela fonctionne comme pv
mais vous pouvez l'utiliser pour copier récursivement des répertoires
Vous pouvez l'obtenir ici
Vérifiez le code source pour progress_bar dans le dépôt ci-dessous de git du mien
https://github.com/Kiran-Bose/supreme
Essayez également le package de script bash personnalisé supreme pour vérifier le fonctionnement de la barre de progression avec les commandes cp et mv.
Aperçu de la fonctionnalité
(1) Ouvrez Apps ---- Firefox ---- Calculatrice ---- Paramètres
(2) Gérer les fichiers ---- 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 depuis le téléphone ---- Déplacer/Copier vers le téléphone ---- Synchroniser les dossiers
(4) Manage USB ---- Déplacer/Copier depuis USB ---- Déplacer/Copier vers USB