Lorsque vous déplacez des répertoires volumineux mv
, existe-t-il un moyen de visualiser la progression (%)? La cp
commande sur gentoo avait un -g
commutateur qui indiquait la progression.
command-line
mv
progress-information
Letronje
la source
la source
Réponses:
Vous pouvez créer un correctif cp et mv qui prennent en charge le commutateur -g pour afficher les progrès. Il y a des instructions et des correctifs sur cette page . Cependant : la page vous demande de faire
qui écrase l'original cp et mv. Cela a deux inconvénients: premièrement, si un paquet coreutils mis à jour arrive sur votre système, il est écrasé. Deuxièmement, si la version corrigée a un problème, ils risquent de casser des scripts reposant sur les protocoles standard cp et mv. Je préférerais faire quelque chose comme ça:
qui copie les fichiers dans / usr / local / bin qui est destiné aux programmes compilés par l’utilisateur et leur donne un nom différent. Donc, quand vous voulez une barre de progression, vous dites
mvg -g bigfile /mnt/backup
et utilisez mv normalement.Aussi, vous pouvez faire,
alias mvg="/usr/local/mvg -g"
il vous suffit de diremvg bigfile /mnt/backup
et d'obtenir directement la barre de progression.la source
Je n'aime pas l'idée de remplacer les fichiers binaires de Coreutil lorsqu'il existe des solutions plus simples. Voici donc les miennes:
rsync : Rsync copie les fichiers et dispose d'un
-P
commutateur pour une barre de progression. Donc, si vous avez installé rsync, vous pouvez utiliser un simple alias dans le fichier dot de votre shell:L'inconvénient est que rsync est un peu plus lent que cp, mais vous devriez le mesurer avec le temps et décider vous-même, je peux vivre avec :-)
Script shell : Un script shell peut également créer la barre de progression. J'ai trouvé cela il y a quelque temps sur le net et je ne me souviens pas de la source:
Cela ressemblera à:
bar :
bar
est un petit script shell permettant d'afficher une barre de processus pour tout type d'opération (cp, tar, etc.). Vous pouvez trouver des exemples sur la page d'accueil du projet.C'est aussi écrit pour le bourne shell, donc il passera partout.
la source
bar
ne pas emballermv
encore.rsync
cela ne remplace pasmv
complètement (l'OP demande), en particulier lorsqu'il s'agit de copies rapides sur des systèmes de fichiers de type copie sur écriture, par exemplebtrfs
.Il existe un nouvel outil appelé
progress
qui peut trouver n’importe quel descripteur associé à une commande en cours et afficher la progression et la vitesse: disponible iciaffiche les statistiques pour toutes les opérations en cours de cp, mv, etc.
la source
progress
après l'installation et cela m'a présenté l'état d'avancement de lamv
commande que j'attendais actuellement. Merci!sudo
(le même utilisateur, je suppose) - vous pouvez également utiliserwatch
pour dire ce qui se passe toutes les 2 secondes:watch progress -w
watch progress -w
vous pouvez également simplement utiliserprogress -m
Vous pouvez utiliser la commande pipe viewer
pv
pour afficher la barre de progression:J'utilise souvent cela pour copier un gros fichier sur un système de fichiers réseau monté (combiner avec
gzip
ettar
). L'inconvénient est que vous ne pouvez copier qu'un seul fichier et non un répertoire. Et vous devez donner un nom au nouveau fichier. Vous ne pouvez pas simplement donner le répertoire de destination comme lecp
fait le fichier . Cependant, la copie n'est paspv
un but. C'est un outil puissant qui fait bien plus que copier un fichier. Voir la page d'accueil pour plus d'exemples depv
.Une bien meilleure option consiste à utiliser
rsync -aP
. Si vous préférezmv
, ajoutez le drapeau--remove-source-files
. Ajoutez ceci à votre.bashrc
si vous voulez utiliser les commandes fréquemment:L'inconvénient est que rsync ne montre que la progression, pas une barre de progression.
la source
tar cf - source-dir | pv | tar xf - -C out-dir
vous donnera le débit de tout un répertoire. Si vous connaissez la taille et passez-s
à pv, cela peut aussi vous faire progresser.Si votre objectif est de déplacer / copier un répertoire avec une barre de progression, tout en évitant les interfaces graphiques non terminaux, mc (Midnight Commander) est un bon choix.
la source
Ma solution est d'utiliser
rsync
. Il peut copier des répertoires, supprimer les fichiers source après une copie réussie (et donc les "déplacer") et afficher des rapports d'avancement, parmi de nombreuses autres fonctionnalités (notamment la synchronisation des répertoires partiellement copiés et le travail sur le réseau.)Voici comment déplacer un répertoire avec rsync, avec rapport de progression:
Assurez-vous
$src
que rien ne se termine par une barre oblique inverse, sinon vous obtiendrez une signification différente de celle de GNUcp
.Le
rm -r
à la fin est nécessaire car--remove-source-files
ne supprime que les fichiers source, une fois que chacun est copié avec succès, pas les répertoires. Le&&
fait que l'exécuter que si rsync se termine avec succès. Si vous êtes paranoïaque, vous pouvez le remplacer par une sorte de récursifrmdir
, tel quefind $src -d -exec rmdir {} +
Le seul problème est que l'
-P
option indique la progression pour chaque fichier, pas pour l'opération de copie complète. Cela peut être inutile si vous essayez de déplacer un répertoire contenant de nombreux fichiers minuscules. La dernière version de développement de rsync comporte un indicateur alternatif--info=progress2
indiquant les progrès réalisés pour l'ensemble de l'opération.la source
Pour éviter le correctif coreutil auquel ajouter une barre de progression
mv
etcp
,gcp
(CoPier de Goffi) est une nouvelle alternative: http://wiki.goffi.org/wiki/Gcp/enÀ utiliser de la même manière
cp
qu'avec les options-r
de récursivité et-v
de verbosité.Il utilise une file d'attente de fichiers lorsque plusieurs commandes sont appelées simultanément. Il permet également d’enregistrer les noms de fichiers copiés dans un journal. Pour plus d’informations, reportez-vous à la section relative à la page de manuel relative à l’ enregistrement des sources .
Voici un bon tutoriel pour commencer
gcp
: http://mylinuxbook.com/gcp-advanced-command-line-file-copier-inspired-by-cp/la source
Tout d'abord: je ne copie jamais de gros fichiers sans utiliser ionice, à moins que je sache que je ne souhaite pas utiliser l'ordinateur pendant une demi-heure ou plus.
Deuxièmement: toutes mes partitions sont journalières, la copie intrapartition ne prend pas de temps. Si c'est une longue copie, je fais un
du -sm
sur les fichiers etdf -m | grep copy_to_partition
. Ensuite, si vous êtes curieux de savoir combien de temps il faudra encore, jedf
recommence et vois combien de fichiers ont été copiés.la source
J'aime utiliser gcp sur ceci ou sur la solution curl (ce qui est vraiment agréable)
Vous pourriez avoir besoin de l'installer
sudo apt-get install gcp
Et une très belle et excellente tâche pour la barre de progression avec des informations sur
dans un format lisible est:
En outre, vous devrez peut-être d'abord l'installer
sudo apt-get install curl
la source
gcp
ne prend pas en charge le déplacement de fichier, c.-à-d. que les fichiers source doivent être supprimés manuellement après la copie.Cela ne vous donne pas une barre de progression, mais appuyez sur
CTRL-T
et vous enverrez unSIGINFO
àmv
, qui indiquera le fichier sur lequel le travail est en cours et le déroulement du processus. Très pratique d'avoir ceci pour les transferts de fichiers volumineux, peut-être moins utile pour un transfert avec de nombreux petits fichiers.Exemple rapide:
la source
INFO: unknown signal; killall -l lists signals.
pense que SIGINFO ne concerne que certains BSD, pas le POSIX standard.Permet
mv -v
d’imprimer une ligne par fichier déplacé etpv -l
d’imprimer la progression en fonction du nombre de lignes (nombre de fichiers effectif).Vous aurez besoin
pv
(lecteur de pipe): http://www.ivarch.com/programs/pv.shtmlUtilisez la commande suivante pour obtenir le nombre de fichiers:
Cette commande affiche les informations de progression en fonction du nombre de fichiers copiés. Cela fonctionne mieux s'il y a beaucoup de fichiers de petite taille. S'il n'y a que quelques fichiers qui sont énormes, vous ne vous amuserez pas beaucoup.
Notez que
mv
sur la même partition devrait être rapide.mv
sur une autre partition serait la même que cellecp source target
suivie parrm source
. Donc, voici deux commandes pour copier des répertoires avec des informations de progression.pour signaler les progrès en fonction du nombre de fichiers copiés:
pour signaler la progression en fonction des octets copiés:
Voir ici pour plus de détails: informations de progression via pv pour la copie du répertoire
la source
Invariablement, je finis par chercher cette réponse après avoir lancé la commande 'mv', point auquel je ne veux plus la recommencer. Si vous êtes dans cette situation, un moyen très simple de surveiller les progrès (ou de voir si c'est assez loin pour que ça ne vaille pas la peine d'être tué) est de courir:
Ceci imprimera simplement la taille du répertoire afin que vous puissiez voir combien de données ont été copiées, ou vous pouvez l'exécuter plusieurs fois pour voir à quelle vitesse les données sont transférées.
la source