Est-il possible de voir la vitesse de traitement et le pourcentage de copies?

251

J'ai des problèmes pour copier des fichiers volumineux avec Nautilus (cela reste bloqué). J'ai besoin de copier, en utilisant cp. J'aimerais savoir s'il existe des paramètres indiquant le pourcentage copié et la vitesse de transfert.

YZT
la source
39
Vous pouvez utiliser rsyncau lieu de cp. Il a une --progressoption.
Frostschutz
2
Midnight Commanderfonctionne également bien, et a une jolie interface utilisateur texte avec des barres de progression, mais peut ne pas être installé. Essayez mcsur l'invite de commande. Aussi, évidemment, ce n'est pas cp.
un CVn
3
Utiliser rsyncavec --progressvient de me faire comprendre ce qui se passe. Il se coince quand il atteint les 100%, puis dure quelques minutes. Je pense que c'est la même chose qui se passe avec Nautilus. Quoi qu’il en soit, c’est déjà une autre question. La meilleure réponse à cette question est la suivante rsync --progress: elle indique la taille, le pourcentage, la vitesse et le temps écoulé.
YZT
2
L'un des problèmes de rsync est qu'il s'exécute plus lentement qu'une copie pure. Sur mon gros serveur, la différence est respectivement de 60 Mo / s et 300 Mo / s.
pdwalker
1
@pdwalker même avec l' -Woption? sur tous mes hôtes rsyncest presque aussi rapide que cp... si proche que j'utilise régulièrement rsyncau lieu de cp.
Skaperen

Réponses:

194

rsynca un drapeau appelé progress2qui montre le pourcentage global:

rsync --info=progress2 source dest
YZT
la source
5
--info = progress2 ne l'a toujours pas fait dans un référentiel par défaut et le voici en 2015. Cela semble être une bonne idée.
Lonniebiz
1
--info=progress2enfin inclus sur version 3.1.0 protocol version 31. Peut-être que vous pourriez modifier votre réponse, yzT.
Sopalajo de Arrierez
1
J'ai remarqué --info=progress2que rsync est rapide! 200 Mo / s, alors que Windows ne va pas plus loin que 90 Mo / s!
ReneFroger
1
@ReneFroger bien que cela puisse être la vitesse réelle (en fonction du périphérique), souvent sous Linux, cette vitesse rapide est vraiment fausse, et une fois la copie terminée, le système écrit toujours sur le périphérique, contrairement à Windows qui permet d'éjecter le périphérique. presque immédiatement. Si vous copiez des fichiers volumineux, vous remarquerez que la vitesse de démarrage est très rapide, mais que celle-ci est réduite au format standard.
YZT
7
cela a fonctionné pour moi avec juste --progress. rsync version 3.0.9
adrianTNT
103

Si vous autorisez d'autres outils que cpce n'est sûrement possible. Pour un seul fichier, vous pouvez utiliser pv. C'est un petit outil fournissant de bonnes statistiques.

pv inputfile > outputfile

Si vous avez plusieurs fichiers ou répertoires, vous pouvez utiliser tar:

tar c sourceDirectory | pv | tar x -C destinationDirectory

Vous pouvez l'envelopper dans une fonction shell. C'est moins de taper et vous obtenez une sémantique proche de celles de cp. Voici une fonction très simple (et non infaillible!):

cpstat () {
  tar c "$1" | pv | tar x -C "$2"
}

Notez que certaines versions de tarne prennent pas en charge la syntaxe susmentionnée (par exemple, Solaris tar) et que vous devez utiliser la variante suivante:

cpstat () {
  tar cf - "$1" | pv | (cd "$2";tar xf -)
}

Vous l'appelez comme ça

cpstat sourceDirectory destinationDirectory

Vous pouvez l'améliorer davantage, ce qui pvfournit une estimation du temps restant.

Une autre solution (comme mentionné dans un commentaire de frostschutz) consiste à utiliser rsync avec l' --progressoption:

rsync --progress -a sourceDirectory destinationDirectory
Marco
la source
1
cpstat va dans le pastebin =)
Matt
7
Cela vous donnera une vitesse de transfert, mais pas d'ETA, car vous pvne savez pas combien de données vont transiter par le tuyau. Vous pouvez spécifier ceci avec -s. Par exemple , d' abord faire du -sh sourceDirectorypour obtenir une (rude) idée, et passer ensuite à pv, comme ceci: pv -s 100m.
Jan Fabry
1
--info = progress2 vous donne des statistiques de progression au niveau du répertoire.
AlexLordThorsen
vbuf(debian, ubuntu) est un peu plus rapide que pv, probablement à cause de sa mémoire tampon virtuelle
Skaperen
@ Skaperen je ne sais pas vbuf. Mais comme il semble que ce soit dans Debian, il est instable pour le moment et donc souvent non disponible sur les serveurs qui exécutent habituellement Debian stable.
Marco
58

rsync fonctionne le mieux pour montrer la progression pendant la progression de la copie.

ex:

rsync -avh --progress sourceDirectory destinationDirectory
JustStoppingThrough
la source
27

Comme expliqué dans d'autres réponses, cp ne fournit pas cette fonctionnalité. Cependant, progress (anciennement appelé cv) est un petit outil très utile pour fournir cette fonctionnalité manquante.

Cet outil peut être décrit comme une commande Tiny Dirty Linux Only * C qui recherche les commandes de base de coreutils (cp, mv, jj, tar, gzip / gunzip, cat, ...) en cours d'exécution sur votre système et affiche le pourcentage de copies. Les données.

Je l'utilise depuis quelques mois et c'est solide.

Amr Mostafa
la source
ne semble pas fonctionner avec tous les systèmes de fichiers (par exemple, cifs) mais +1, je ne connaissais pas de telles sorties folles
akostadinov
1
Notez que ce projet s’appelle maintenant "progrès - Coreutils Progress Viewer (anciennement connu sous le nom de cv)".
chappjc
17

Est-il possible de voir la vitesse de traitement et le pourcentage de copies?

Oui, il est possible d’afficher l’avancement de la commande cpsur le terminal.


Méthode n ° 1: (utiliser progress)

Ouvrez un nouveau terminal et tapez progressil affichera la progression de la cpcommande et d'autres commandes telles que:

cp, mv, dd, tar, cat, rsync, grep, fgrep, egrep, cut, sort, md5sum, sha1sum, sha224sum, sha256sum, sha384sum, sha512sum, adb, gzip, gunzip, bzip2, bunzip2, xz, unxz, lzma, unlzma, 7z, zcat, bzcat, lzcat, split, gpg

Si vous n'avez pas installé progress, vous pouvez l'installer à partir d'un référentiel, par exemple CentOSavec la commande suivante yum -y install progress:.

Ensuite, après avoir exécuté la cpcommande en arrière-plan ou cpnormalement, ouvrez un autre terminal, essayez donc cette commande:

# progress -m

Voir la sortie:

[30904] cp /home/user/file.mp4
        2.3% (200.9 MiB / 8.4 GiB) 3.6 MiB/s remaining 0:38:58

Méthode n ° 2: (utilisez le correctif cp)

Ou téléchargez le fichier GNU coreutilset corrigez-le.

cd /tmp
wget http://ftp.gnu.org/gnu/coreutils/coreutils-8.21.tar.xz
tar -xvJf coreutils-8.21.tar.xz
cd coreutils-8.21
wget https://raw.githubusercontent.com/atdt/advcpmv/master/advcpmv-0.5-8.21.patch
patch -p1 -i advcpmv-0.5-8.21.patch

Courir:

export FORCE_UNSAFE_CONFIGURE=1
./configure
make

Copiez les deux fichiers cpet mvloacated sous coreutils-8.21/src/à /usr/local/bin:

cp src/cp /usr/local/bin/cp
cp src/mv /usr/local/bin/mv

Ou copiez-le en utilisant votre gestionnaire de fichiers en tant que root

Ajoutez les lignes suivantes à votre ~/.bashrc:

alias cp='cp -gR'
alias mv='mv -g'

Déconnexion et connexion

La barre de progression peut être affichée sans le –gou –progress-bartel que recommandé par l'auteur

Voir la sortie:

0 files copied so far...                                              194.4 MiB /   8.4 GiB
[||--------------------------------------------------------------------------------]  2.3 %
Copying at   3.3 MiB/s (about 0h 5m 47s remaining)
/home/user/file.mp4                                                   194.4 MiB / 446.1 MiB
[||||||||||||||||||||||||||||||||||||----------------------------------------------] 43.6 %

Source: linuxhelp

GAD3R
la source
1
Cela ressemble à la vraie source du cppatch: web.archive.org/web/20131115171331/http://beatex.org/web/...
Kaushal Modi
1
+1 pour l'indice de progresscommandement
Peter
c'est la seule vraie réponse
Alessio
14

Remarqué cette publication était un peu vieux. Mais au moment de résoudre le problème, je pensais publier ma solution.

Scénario: Nous souhaitons copier une très grande structure de répertoire. Nous émettons donc la commande cp -R sourcedir destdir dans une fenêtre de terminal.

Ouvrez une autre fenêtre de terminal ou placez le processus en arrière-plan (Ctrl+Z,bg<CR>), puis définissons un indicateur de progression à la manière du ghetto:

Nous obtenons d’abord la taille totale de la structure de répertoire que nous voulons copier, vous le faites avec:

du -sh /path/sourcedirectory/

Convertissez le résultat en gigaoctets (G), puis substituez le n au résultat obtenu dans la variable sourcesize. Une fois que vous avez inséré sourcesize et destdir (répertoire de destination), exécutez la commande ci-dessous.

while true; do sourcesize=n destdir=/path/destinationdirectory/ copyprogress="$(export | du -sh $destdir | awk '{print $1}' | sed 's/[^0-9.]*//g' )" ; echo "scale=3 ; $copyprogress / $sourcesize * 100" | bc | xargs echo -n ; echo % completed ; sleep 10 ; done

Cela affichera la progression toutes les 10 secondes avec des messages tels que:

0.100% completed
0.200% completed
0.300% completed 
... etc

Je suis conscient que cette solution ne tient pas compte de la vitesse de copie, mais il serait possible de l'ajouter en développant les commandes ci-dessus, éventuellement en les transformant en script bash afin de faciliter leur lecture. Par exemple en vérifiant combien de données sont copiées pr. n unité de temps, la vitesse devrait être facile à calculer et à afficher.

NordicViking
la source
Ceci est en fait parfait pour mon cas d'utilisation, alors merci de l'avoir posté! Je souhaite connaître l'état d'avancement de la copie d'un vaste répertoire contenant des milliers de fichiers, et non d'un seul fichier, de sorte que les autres solutions ne m'aident pas vraiment.
Ibrahim
C’est formidable, en particulier dans des cas tels que celui que j’éprouve en ce moment: a démarré à distance un énorme mv-job pour déplacer des terrabytes de sauvegardes d’un pool de stockage à un autre, sans penser aux implications à l’avance. Maintenant, je peux facilement mettre en arrière-plan le processus et y jeter un coup d'œil. Impressionnant!
Riley
8

Pour améliorer la réponse de Marco, aujourd’hui, j’ai écrit cette version de cpstat, vous pouvez donc copier plusieurs répertoires et utiliser le dernier paramètre comme chemin de destination. Notez que si vous utilisez un chemin d'accès profond relatif comme source, vous pouvez tar, automatiquement, créer automatiquement la même arborescence de répertoires dépendante.

function cpstat () {

    tar -cf - "${@: 1: $#-1}" |
    pv -s "$( du -cs -BK --apparent-size "${@: 1: $#-1}" |
              tail -n 1 |
              cut -d "$(echo -e "\t")" -f 1)" |
    ( cd "${@: $#}"; tar -xf - )

;}
poe84it
la source
6

Pas dans une version standard de cp.

Vous pouvez utiliser le cp en arrière-plan et lister la taille en attendant cpde terminer.

J'utilise ce Perl pour surveiller la croissance d'un seul fichier mais il fonctionne en externe sur le cp (ou tout ce que je fais d'autre)

Mat
la source
5

Même si rsynccela vous donnera des statistiques de progression, si vous voulez une barre de progression, vous devriez utiliser pv.

Vous pouvez utiliser cpvun wrapper pvavec une syntaxe plus simple, plus similaire à celui cpque vous pouvez utiliser pour copier de manière récursive des répertoires

entrez la description de l'image ici

Vous pouvez l'obtenir ici

nachoparker
la source
+1 pour l'allusion pv. Belle trouvaille!
Peter
4

L'utilisation d'un outil tel que mc(commandant de minuit) peut être une bonne alternative à d'autres réponses.

C'est un simple gestionnaire de fichiers qui vous montre les progrès de la copie / du déplacement.

jseals
la source
4

dd status=progress

Option ajoutée dans GNU Coreutils 8.24+ (Ubuntu 16.04):

dd if=src of=dst status=progress

Stdout est une ligne périodiquement mise à jour comme:

462858752 bytes (463 MB, 441 MiB) copied, 38 s, 12,2 MB/s

Voir aussi: Comment surveillez-vous la progression de jj? | Demandez à Ubuntu

Ciro Santilli 改造 中心 六四 事件
la source
4

Une autre solution simple consiste à regarder le dossier de sortie comme suit:

Linux / Cygwin: watch -n 10 --differences du -sk --apparent-size <WATCHED_FOLDER>

FreeBSD: gnu-watch -n 10 --differences du -sk <WATCHED_FOLDER>

Cet utilitaire pratique sera exécuté duet soulignera les différences.

Une autre solution potentielle serait d'écrire un script simple en boucle, appelant duet crachant une estimation approximative du débit.

Timothy C. Quinn
la source
3

Cet outil est une commande d’utilitaire Linux qui recherche les commandes de base coreutils (cp, mv, jj, tar, gzip / gunzip, cat, etc.) en cours d’exécution sur votre système et affiche le pourcentage de données copiées:

https://github.com/Xfennec/cv

saidi
la source
1
Cela a déjà été suggéré par @AmrMostafa en novembre 2014.
Dubu
2

Je viens d'avoir un cas où cp était plus ou moins bloqué en raison d'un bogue FUSE dans le système de fichiers de réception.

Si vous ne pouvez pas simplement passer de cp (c'est-à-dire parce que --sparse = toujours) et que vous voulez quelque chose qui soit réellement fiable pour le progrès, passez par / proc.

Every 2.0s: cat /proc/20977/io                                                      Thu Sep 28 04:08:57 2017

rchar: 268573800
wchar: 268500992
syscr: 4112
syscw: 4097
read_bytes: 268697600
write_bytes: 0
cancelled_write_bytes: 0
Florian Heigl
la source
0

VCP - copie des fichiers dans une interface curses (affiche la barre de progression sous Linux).

DESCRIPTION: vcp copie les fichiers et les répertoires dans une interface curses, avec seulement la sortie texte disponible. ses options et son résultat sont similaires à ceux de BSD tout en ajoutant de nouvelles fonctionnalités.

Il fournit des informations sur:

  • fichiers copiés et laissés à copier
  • données écrites et taille totale des données
  • les données sont écrites chaque seconde
  • deux barres d'état, l'une indiquant l'état actuel du fichier, l'autre l'état total (sauf avec 1 fichier, les deux indiquant l'actuel) et le pourcentage

quand la sortie est envoyée à la console:

  • une barre d'état
  • taille copiée et vitesse

Page de manuel de VCP: https://linux.die.net/man/1/vcp

Téléchargez vcp-2.2.tar.gz à partir de:

http://distfiles.gentoo.org/distfiles/vcp-2.2.tar.gz

Dépendance: curses.h (libncurses-dev).

Sur Ubuntu, installez:

sudo apt-get install libncurses-dev

ou

sudo apt-get install libncurses5-dev

INSTALLER vcp:

make && make install

Manuel:

man vcp
utilisateur350351
la source