Sinon, existe-t-il un autre utilitaire de ligne de commande capable d’atteindre cet objectif?
Sinon, existe-t-il un autre utilitaire de ligne de commande capable d’atteindre cet objectif?
Réponses:
Bien que cp
vous n'ayez pas cette fonctionnalité, vous pouvez utiliser pv
ceci:
pv my_big_file > backup/my_big_file
Remarque: cette méthode perd les autorisations et la propriété du fichier. Les fichiers copiés de cette manière auront les mêmes autorisations que si vous les aviez créés vous-même et vous appartiendraient.
Dans cet exemple, pv
le fichier est simplement sorti sur stdout *, que vous redirigez vers un fichier à l'aide de l' >
opérateur. Simultanément, il imprime des informations sur la progression sur le terminal lorsque vous le faites.
Voici à quoi ça ressemble:
stefano@ubuntu:~/Data$ pv my_big_file > backup/my_big_file
138MB 0:00:01 [73.3MB/s] [=================================>] 100%
Vous devrez peut-être installer pv (alternativement, taper sudo apt-get install pv
) sur votre système.
*: Le bit technique
Il existe trois flux de données importants dans un système de type Unix: stdout (sortie standard), stderr (erreur standard) et stdin (entrée standard). Chaque programme a les trois, pour ainsi dire. L' >
opérateur de redirection redirige la sortie du programme vers un fichier. Sans arguments, comme vous le voyez ci - dessus, >
réoriente d'un programme sur la sortie standard dans un fichier. cp
fondamentalement ne fait rien de plus chic que
cat source > destination
(où cat
juste lit un fichier et l’imprime sur stdout). pv
est comme cat, mais si vous redirigez son flux de sortie ailleurs, il affichera les informations de progression sur stdout.
Jetez un coup d'oeil man pv
pour en savoir plus à ce sujet.
Une autre option, comme le suggère DoR dans cette réponse , consiste à utiliser rsync à la place:
$ rsync -ah --progress source-file destination-file
sending incremental file list
source-file
621.22M 57% 283.86MB/s 0:00:01
Cela préservera les autorisations / la propriété des fichiers tout en affichant la progression.
alias cp="rsync -avz"
cp est obsolète.
pv
ça, vous pouvez aller fouiner /proc/PID of cp/fd
et /proc/PID of cp/fdinfo
comprendre le progrès. (C'est à vous d'inférer la vitesse.) J'utilise cette technique pour regarder updatedb
.
-z
ne devrait probablement être utilisé que pour les copies réseau; la compression et la décompression des données pour une copie locale est une simple surcharge.
rsync
ne pas ajouter de fin /
au chemin source (ou de le supprimer si, par exemple, l'achèvement de bash le met là automatiquement). Sinon, vous obtiendrez des résultats différents de ceux obtenus avec cp
(ou gcp
).
Il n'y a pas. Voir ici pour savoir pourquoi. Bien qu'il fasse plus que ce dont vous avez besoin, il rsync
possède un --progress
paramètre. Le -a
conservera les autorisations, etc., et -h
sera lisible par l'homme.
rsync -ah --progress source destination
La sortie ressemblera à ceci:
Pictures/1.jpg
2.13M 100% 2.28MB/s 0:00:00 (xfr#5898, to-chk=1/5905)
Pictures/2.jpg
1.68M 100% 1.76MB/s 0:00:00 (xfr#5899, to-chk=0/5905)
-r
drapeau pour recurse répertoires. Il peut même être aliasé en remplacement direct de cp:alias cp="rsync -ah --progress"
--progress
me fait tourner la tête, je regarde tout l’affichage de la sortie dans le terminal. Donc, ceux qui viennent ici à partir de recherches par mot-clé AOL rsync -ah --info=progress2 [source] [destination]
présentent la sortie de manière un peu plus saine, à mon humble avis.
Si vous voulez voir si vos fichiers sont correctement transférés, vous pouvez utiliser gcp
et gcp
ressemble à cp, mais vous obtiendrez par défaut une barre de progression vous permettant de voir ce qui est copié. Comme le note le wiki du programme , gcp
a plusieurs fonctionnalités utiles telles que
- indication de progression de transfert
- copie en continu en cas d'erreur (passez au fichier suivant)
- enregistrement du statut de la copie: gcp enregistre toutes ses actions afin qu'il soit possible de savoir quels fichiers ont été copiés avec succès
- changement de nom pour gérer les limitations du système de fichiers cible (par exemple, suppression des caractères incompatibles "*" ou "?" sur FAT)
Cependant, même lorsque la barre de progression a atteint 100% lors de l'utilisation de l'outil, vous devez attendre que votre invite de terminal réapparaisse avant de retirer votre média en toute sécurité pour pouvoir vous assurer que le processus de transfert s'est terminé avec succès.
gcp
est utilisé pour copier des fichiers et comporte des options --preserve
permettant, par exemple, de conserver divers attributs et autorisations et de copier --recursive
des répertoires entiers. Pour plus d’informations sur ses options, consultez man gcp
ou en consultant les pages de manuel Ubuntu en ligne . Un tutoriel est également disponible sur ce site .
Installer à gcp
partir des référentiels avec
sudo apt-get install gcp
( Remarque : dans Ubuntu 12.10, le nouveau point de montage automatique est, par exemple, /media/user/usbdisk
)
Vous pouvez copier un fichier sur votre support en entrant
gcp /home/mike/file.mp4 /media/usb
et copier un dossier sur votre support avec
gcp -rv ~/Podcasts /media/Mik2
Exemple de sortie gcp
avec la barre de progression:
gcp ~/Videos_incIplayer/mars.flv /media/Mik2
Copying 168.57 MiB 100% |########################################################| 7.98 M/s Time: 00:00:22
Vous pouvez bien sûr spécifier plusieurs fichiers ou dossiers à copier sur votre disque, et de nombreuses autres options sont couvertes dans man gcp
.
dbus.exceptions.DBusException: org.freedesktop.DBus.Error.NotSupported: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11
export DISPLAY=:0.0
avant de démarrer gcp. Si la machine est sans tête, vous devrez alors démarrer une xsession dans un framebuffer virtuel ou quelque chose du
gcp
est assez décent, mais l’exigence DBUS / X est étrange. J'ai géré cela sur SSH en utilisant le transfert ssh: ssh -X user@host
et cela m'a permis de l'exécuter.
J'adore utiliser cURL dans ce but précis. La page de manuel répertorie le protocole "FILE" comme supporté, donc utilisez-le comme n'importe quel autre protocole dans une URL:
curl -o destination FILE://source
Vitesse, progrès, temps restant et plus encore - le tout dans un format familier.
pv
ne pas enregistrer les autorisations.
Bien qu’elle n’affiche pas la vitesse, lors de la copie de plusieurs fichiers, l’ -v
option de la cp
commande vous fournira des informations sur la progression. par exemple
cp -rv old-directory new-directory
Le noyau connaît la plupart des données telles que la vitesse et souvent aussi le pourcentage. Les noyaux modernes l'exposent via leur système de fichiers / proc.
showspeed à partir de https://github.com/jnweiger/showspeed utilise ces informations. Il peut s'attacher aux programmes en cours d'exécution et donner des mises à jour périodiques comme ceci:
$ dd if=bigfile of=/tmp/otherbigfile &
$ showspeed dd
dd looks like a process name. pid=4417 matches av0=dd.
p/4417/fd/0r /home/jw/bigfile 113MB/s (12%, 2.3GB) 9m:35
p/4417/fd/1w /tmp/otherbigfile 182MB/s (2.6GB)
p/4417/fd/0r /home/jw/bigfile 285MB/s (15%, 3.0GB) 8m:08
p/4417/fd/0r /home/jw/bigfile 115MB/s (16%, 3.2GB) 8m:01
p/4417/fd/0r /home/jw/bigfile 107MB/s (17%, 3.4GB) 7m:39
p/4417/fd/1w /tmp/otherbigfile 104MB/s (3.5GB)
p/4417/fd/0r /home/jw/bigfile 139MB/s (19%, 3.7GB) 7m:37
p/4417/fd/0r /home/jw/bigfile 116MB/s (20%, 3.9GB) 7m:18
p/4417/fd/1w /tmp/otherbigfile 67MB/s (4.0GB)
p/4417/fd/1w /tmp/otherbigfile 100MB/s (4.1GB)
...
pkill -USR1 dd
pour faire dd
montrer son statut, une autre option serait watch -n 1 pkill -USR1 dd
de le faire montrer ses progrès périodiquement (chaque seconde).
Il existe progress
dans les référentiels un outil capable d’examiner diverses commandes et d’afficher des informations sur leur progression.
Installez-le en utilisant la commande
sudo apt-get install progress
Cet outil peut être utilisé comme ça:
cp bigfile newfile & progress -mp $!
Sortie:
[11471] cp /media/Backup/Downloads/FILENAME.file
29.9% (24.2 MiB / 16 MiB)
Alors que pv
peut traiter des cp
tâches locales , utiliser dd
avec pv
peut traiter à la fois les tâches locales ( cp
) et distantes ( scp
).
dd if=path/to/source.mkv | pv | dd of=path/to/dest.mkv
S'il vous plaît assurer les path/to/dest.mkv
sorties partouch path/to/dest.mkv
Cela peut montrer la progression, mais si vous voulez les informations de pourcentage,
dd if=path/to/source.mkv | pv -s 100M | dd of=path/to/dest.mkv
Remplacez 100M
ci-dessus par la taille réelle de votre fichier source.
Alors que scp
peut difficilement montrer les progrès actuels, utiliser dd
avec pv
est un morceau de gâteau.
ssh onemach@myotherhost dd if=path/to/source.mkv | pv -s 100M | dd of=path/to/dest.mkv
Il existe un nouvel outil appelé cv qui peut rechercher n’importe quel descripteur associé à une commande en cours et afficher les progrès et la vitesse: https://github.com/Xfennec/cv.
cv -w
affiche les statistiques pour toutes les opérations en cours de cp, mv, etc.
watch cv -q
est encore plus propre
cp
un répertoire est copié de manière récursive ou non.
Comme beaucoup l'ont dit, cp n'inclut pas cette fonctionnalité.
Juste pour lancer mon 0,02 $, ce que je fais habituellement avec des situations de copie triviales (c'est-à-dire non -R
):
Voyez la taille du fichier et rappelez-vous
Commencer à copier
Ouvrir un autre terminal
Exécuter watch ls -lh DIR
sur le répertoire où se trouve la cible
Cela peut me tenir au courant de la taille du fichier cible, avec un minimum de tracas.
Comme alternative aux situations moins triviales, telles que la copie récursive de répertoires, vous pouvez utiliser watch du -hs DIR
pour afficher un résumé de la taille du répertoire DIR. Cependant, la durée de calcul peut être longue et peut même ralentir la copie. Vous pouvez donc utiliser un -n INTERVAL
argument pour observer les compromis, afin que le compromis soit acceptable.
Mise à jour: Si vous utilisez des wild-cards avec la commande utilisée avec watch, par exemple watch du -hs backup/*
, n'oubliez pas de citer:
watch "du -hs backup/*"
sinon les cartes sauvages seront étendues qu'une seule fois , lorsque la montre est commencé si du ne regardera pas de nouveaux fichiers / sous - répertoires.
dd status=progress
Option ajoutée dans GNU Coreutils 8.24+ (Ubuntu 16.04):
dd if=src of=dst status=progress
Le terminal affiche une ligne de type:
462858752 bytes (463 MB, 441 MiB) copied, 38 s, 12,2 MB/s
Voir aussi: Comment surveillez-vous la progression de jj?
Si vous avez rsync 3.1 ou supérieur ( rsync --version
), vous pouvez copier (cp-RPN) tout en préservant les autorisations et les droits de propriété, les répertoires récursifs, "aucun éclatement" et afficher la progression générale très approximatif) le temps restant restant avec:
sudo rsync -a --info=progress2 --no-i-r /source /destination
Notez que sudo n’est nécessaire que s’il s’agit de répertoires / fichiers qui ne vous appartiennent pas. En outre, sans le --no-i-r
, le pourcentage peut être réinitialisé à un nombre inférieur à un moment donné pendant la copie. Peut-être que les versions ultérieures de rsync utiliseront par défaut no-ir avec info = progress2, mais ce n'est pas le cas dans la version actuelle de 3.1.2.
J'ai constaté que le pourcentage et le temps restant étaient largement surestimés lors de la copie dans un répertoire contenant déjà des fichiers (c'est-à-dire comme lorsque vous utiliseriez généralement cp -n "no clobber").
Utilisez un script shell:
#!/bin/sh
cp_p()
{
strace -q -ewrite cp -- "${1}" "${2}" 2>&1 \
| awk '{
count += $NF
if (count % 10 == 0) {
percent = count / total_size * 100
printf "%3d%% [", percent
for (i=0;i<=percent;i++)
printf "="
printf ">"
for (i=percent;i<100;i++)
printf " "
printf "]\r"
}
}
END { print "" }' total_size=$(stat -c '%s' "${1}") count=0
}
Cela ressemblera à:
% cp_p /home/echox/foo.dat /home/echox/bar.dat
66% [===============================> ]
Selon ce que vous voulez faire, Midnight Commander ( mc
) peut être la solution. Je suis surpris que cela n'ait pas encore été mentionné.
Des outils tels que pv
ou rsync
sont utiles pour afficher la progression du transfert d’un fichier volumineux, mais lorsqu’il s’agit de copier des répertoires / arbres entiers, mc
calcule la taille puis affiche très bien la progression. De plus, il est disponible immédiatement sur la majorité des systèmes.
une option supplémentaire pour préserver les attributs pourrait être (si source
c'est un dossier, il sera créé destination
)
tar -c source | pv -e -t -p -r | tar -C destination -x
espérons que cela pourra être utile à quelqu'un. Pour avoir une estimation du temps de transfert, cela peut être obtenu en le faisant do -s source
à l’avance et en le passant comme -s <size>
paramètre à pv
.
-f -
est redondant. tar
La sortie par défaut pour c
et l'entrée pour x
sont stdout et stdin.
Vérifiez le code source de progress_bar dans le référentiel git ci-dessous
https://github.com/Kiran-Bose/supreme
Essayez également le package de script bash personnalisé suprême
Téléchargez le fichier deb et installez-le dans une distribution debian ou téléchargez les fichiers source, modifiez-le et utilisez-le pour d'autres distributions
Aperçu de la fonctionnalité
(1) Ouvrez les applications ---- 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) Gérer l'USB ---- Déplacer / Copier depuis l'USB ---- Déplacer / Copier vers l'USB
pv sait comment regarder les descripteurs de fichier avec un pid, que ce soit cp ou autre chose
De la documentation:
(Linux only): Watching file descriptor 3 opened by another process 1234:
pv -d 1234:3
(Linux only): Watching all file descriptors used by process 1234:
pv -d 1234
Exemple:
md5sum file &
[1] + 1271 suspended
pv -d 1271
417MiB 0:00:17 [12,1MiB/s] [============> ] 29% ETA 0:00:53
$ cp file.mov copy.mov &
[2] 3731
$ pv -d 3731
3:/media/windows/file.mov: 754MiB 0:00:04 [97,2MiB/s] [======================> ] 52% ETA 0:00:07
4:/media/windows/copy.mov: 754MiB 0:00:04 [97,3MiB/s] [ <=> ]
pv
ne la même manière que gère pas les autorisationscp
ne ... (basé sur un test rapide j'ai essayé:pv
ne pas copier le bit d' exécution à travers ..rsync
. A fait