Pertanyaan Bagaimana cara menunjukkan kemajuan transfer dan kecepatan saat menyalin file dengan cp?


Jika tidak, apakah ada utilitas baris perintah alternatif yang dapat mencapai ini?


274
2017-12-14 04:48


asal




Jawaban:


Sementara cp belum memiliki fungsi ini, Anda dapat menggunakan pv untuk melakukan ini:

pv my_big_file > backup/my_big_file

Catatan: metode ini akan kehilangan izin dan kepemilikan file. File yang disalin dengan cara ini akan memiliki izin yang sama seperti jika Anda membuatnya sendiri dan akan menjadi milik Anda.

Dalam contoh ini, pv pada dasarnya hanya menghasilkan file ke stdout *, yang Anda redirect ke file menggunakan > operator. Bersamaan, itu mencetak informasi tentang kemajuan ke terminal ketika Anda melakukan itu.

Seperti inilah tampilannya:

stefano@ubuntu:~/Data$ pv my_big_file > backup/my_big_file
 138MB 0:00:01 [73.3MB/s] [=================================>] 100% 

Anda mungkin perlu Instal pv (sebagai alternatif, ketik sudo apt-get install pv) di sistem Anda.


*: Bit teknis

Ada tiga aliran data penting dalam sistem unix-like: stdout (output standar), stderr (standard error) dan stdin (input standar). Setiap program memiliki ketiganya, sehingga untuk berbicara. Itu > Operator redirection mengalihkan output program ke file. Tanpa argumen, seperti yang Anda lihat di atas, > redirect suatu program keluaran standar ke file. cp pada dasarnya tidak ada yang lebih bagus daripada

cat source > destination

(dimana cat hanya membaca file dan mencetaknya ke stdout). pv sama seperti kucing, tetapi jika Anda mengalihkan aliran keluarannya ke tempat lain, itu akan mencetak informasi kemajuan ke stdout sebagai gantinya.

Melihat man pv untuk mempelajarinya lebih lanjut.


Pilihan lain, seperti alt textDoR menyarankan jawaban ini, adalah dengan menggunakan rsync sebagai gantinya:

$ rsync -ah --progress source-file destination-file
sending incremental file list
source-file
        621.22M  57%  283.86MB/s    0:00:01

Ini akan mempertahankan hak akses file / kepemilikan sambil menunjukkan kemajuan.


204
2017-12-14 05:17



Ini mungkin atau mungkin tidak signifikan (tergantung pada situasinya), tetapi pv tidak menangani izin dengan cara yang sama cp tidak ... (berdasarkan pada satu tes cepat saya mencoba: pv tidak menyalin bit eksekusi di .. rsync melakukan. - Peter.O
IMO: alias cp="rsync -avz" cp sudah usang. - Marco Ceppi♦
Jika Anda seperti saya, dan lupakan pv, Anda bisa mengintai /proc/PID of cp/fd dan /proc/PID of cp/fdinfo untuk mengetahui kemajuan. (Terserah Anda untuk menyimpulkan kecepatan.) Saya menggunakan teknik ini untuk menonton updatedb. - Thanatos
Iya nih, -z mungkin hanya boleh digunakan untuk salinan jaringan; mengompresi dan mendekompresi data untuk salinan lokal adalah overhead murni. - Matthew Read
@Rodrigo rsync -avzP adalah apa yang ingin Anda gunakan. - Marco Ceppi♦


Tidak ada. Lihat sini seperti mengapa. Meskipun itu lebih dari yang Anda butuhkan, rsync memiliki satu dengan --progress parameter. The -a akan menjaga perizinan, dll, dan -h akan dapat dibaca manusia.

rsync -ah --progress source destination

Outputnya akan terlihat seperti ini:

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)

130
2017-10-15 08:06



Ini berfungsi dengan baik di Ubuntu saat ini (14.10). Ini juga mendukung -r flag ke direktori recurse. Ia bahkan dapat di-alias sebagai pengganti langsung untuk cp: alias cp="rsync -ah --progress" - rustyx
Pekerjaan membengkak di OS X, dengan bonus bisa menggunakan alat yang disertakan dengan sistem. - Ivan X
ini bagus, outputnya seperti filename MB-copied MB-speed time-remaining) - Rudolf Olah
Saya suka alternatif ini lebih baik daripada pv, khususnya karena rsync adalah bagian dari instalasi standar - Joao Costa
@bartekbrak terima kasih telah berbagi. Saya saat ini pada macOS 10.12.x menjalankan versi homebrew dari rsync 3.1.2 dan menggunakan --progress membuat kepala saya berputar menonton semua tampilan output di terminal. Jadi mereka yang datang ke sini dari pencarian kata kunci AOL, rsync -ah --info=progress2 [source] [destination]  menyajikan output dalam sedikit lebih ‍️ cara IMHO. - Chris


Jika Anda ingin melihat apakah file Anda mentransfer dengan benar Anda bisa menggunakan gcp dan gcp seperti cp tetapi secara default memberi Anda progress bar sehingga Anda dapat melihat apa yang sedang disalin. Seperti programnya catatan wiki, gcp memiliki beberapa fitur yang bermanfaat seperti

  • transfer indikasi perkembangan
  • continuous copying on error (lompat ke file selanjutnya)
  • copy status logging: gcp mencatat semua tindakannya sehingga dapat diketahui file mana yang telah berhasil disalin
  • nama mangling untuk menangani batasan target filesystem (misalnya penghapusan karakter yang tidak kompatibel "*" atau "?" pada FAT)

Namun, bahkan ketika progress bar telah mencapai 100% ketika menggunakan alat, Anda harus menunggu sampai prompt terminal Anda muncul kembali sebelum dengan aman menghapus media Anda sehingga Anda dapat memastikan bahwa proses transfer telah berhasil selesai.

gcp digunakan untuk menyalin file dan memiliki opsi seperti --preserve sehingga berbagai atribut dan izin dapat dipertahankan dan --recursivesehingga seluruh direktori dapat disalin. Informasi lebih lanjut tentang opsi-opsinya dapat ditemukan dengan memasukkan man gcp atau dengan pergi ke Ubuntu manpages online. Sebuah tutorial juga tersedia di situs ini.

Memasang gcp dari repositori dengan

sudo apt-get install gcp

(Catatan: di Ubuntu 12.10 poin automount baru, misalnya, /media/user/usbdisk)

Anda dapat menyalin file ke media Anda dengan memasukkan

gcp /home/mike/file.mp4 /media/usb

dan salin folder ke media Anda

gcp -rv ~/Podcasts /media/Mik2

Contoh keluaran dari gcp dengan bilah kemajuan:

gcp ~/Videos_incIplayer/mars.flv /media/Mik2
Copying 168.57 MiB 100% |########################################################|   7.98 M/s Time: 00:00:22

Anda tentu saja dapat menentukan beberapa file atau folder untuk disalin ke disk Anda, dan ada banyak opsi lain yang tercakup man gcp.


84
2017-10-15 11:09



Mendapat kesalahan dengan itu melalui ssh dbus.exceptions.DBusException: org.freedesktop.DBus.Error.NotSupported: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11 - msa7
jika Anda memiliki layar X11 terbuka pada mesin yang dapat Anda atur export DISPLAY=:0.0 sebelum memulai gcp. Jika mesin tanpa kepala maka Anda harus memulai xsession ke framebuffer virtual atau sesuatu, pada titik itu Anda mungkin harus mencari program lain. - user292067
gcp cukup baik tetapi persyaratan DBUS / X aneh. Saya menangani ini melalui SSH dengan menggunakan ssh forwarding: ssh -X user@host dan itu memungkinkan saya untuk menjalankannya. - Oli♦


Saya mendapatkan tendangan menggunakan cURL untuk tujuan ini. Halaman manual berisi protokol "FILE" sebagai didukung, jadi gunakan saja seperti protokol lain dalam URL:

curl -o destination FILE://source

Kecepatan, progres, waktu tersisa, dan banyak lagi - semua dalam format yang dikenal.


54
2018-02-02 09:00



Ini bagus terutama di lingkungan di mana Anda dilarang menginstal alat-alat baru dan di mana rsync tidak tersedia.
Brilian, ini harus menjadi hack yang harus diketahui! - ionreflex
Jawaban bagus! Pintar! - 9301293
Ini mungkin memiliki kekurangan yang sama sebagai pv, bahwa itu tidak akan menghemat izin. - Ploni


Meskipun tidak menampilkan kecepatan, saat menyalin beberapa file, -v opsi untuk cp perintah akan memberi Anda info perkembangan. misalnya

cp -rv old-directory new-directory

22
2017-12-14 17:17



Info kemajuan? Ini hanya output verbose. Untuk memberikan info perkembangan, paling tidak Anda perlu sekarang berapa banyak file, atau bahkan file mana, yang perlu disalin. - Julian F. Weinert


Kernel mengetahui sebagian besar data seperti kecepatan, dan sering juga persentase. Kernel modern mengekspos ini melalui filesystem / proc mereka.

menunjukkan dari https://github.com/jnweiger/showspeed menggunakan info itu. Ini dapat dilampirkan ke program yang sudah berjalan dan memberikan pembaruan berkala seperti ini:

$ 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)
...

19
2018-02-25 14:34



Bagus sekali. Bagaimana cara kerjanya persentase meskipun? Saya kira hanya dalam kasus file s terbuka sebagai hanya baca? Dan itu mungkin tidak akan bekerja jika ada akses yang tersebar. - j_kubik
Dalam hal ini Anda juga dapat menggunakan terminal lain untuk dijalankan pkill -USR1 dd untuk membuat dd menunjukkan statusnya, opsi lain akan watch -n 1 pkill -USR1 dd untuk membuatnya menunjukkan kemajuannya secara berkala (setiap detik). - Yaron
Kanan. Banyak alat mendapatkan cara yang dibangun untuk melaporkan statistik dari waktu ke waktu. dd tidak terkecuali. Implementasi modern memiliki status = opsi progess. Showspeed adalah solusi unix style "satu alat untuk satu tujuan" klasik - seperti pv. Tapi itu memiliki usecases berbeda: Pikirkan cangkir memompa file melalui ghostscript atau Anda ingin mengetahui ETA untuk cp atau tar yang sedang berlangsung. Mungkin 95% sudah selesai setelah beberapa jam dan Anda mungkin tidak ingin me-restart itu hanya untuk menambah ... Akses yang tersebar tidak akan berfungsi dengan baik. Showspeed hanya sampel yang mencari posisi. - Jürgen Weigert


Sementara pv dapat menangani lokal cp tugas, menggunakan dd dengan pv dapat menangani lokal (cp) dan jarak jauh (scp) tugas.

dd if=path/to/source.mkv | pv | dd of=path/to/dest.mkv

Harap pastikan path/to/dest.mkv keluar dengan touch path/to/dest.mkv

Ini dapat menunjukkan kemajuan, tetapi jika Anda menginginkan informasi persentase,

dd if=path/to/source.mkv | pv -s 100M | dd of=path/to/dest.mkv

Menggantikan 100M di atas dengan ukuran sebenarnya dari file sumber Anda.

Di sini Hadir Bagian Remote

Sementara scp hampir tidak bisa menunjukkan kemajuan saat ini, menggunakan dd dengan pv adalah sepotong kue.

ssh onemach@myotherhost dd if=path/to/source.mkv | pv -s 100M | dd of=path/to/dest.mkv

11
2018-01-05 08:08



Lebih baru dd punya status=progress: askubuntu.com/a/824895/52975 - Ciro Santilli 新疆改造中心 六四事件 法轮功


Ada alat baru bernama cv yang dapat menemukan deskriptor apa pun yang terkait dengan perintah berjalan dan menunjukkan kemajuan dan kecepatan: https://github.com/Xfennec/cv

cv -w

menampilkan statistik untuk semua operasi cp, mv, dll


10
2017-07-13 11:33



watch cv -q bahkan lebih rapi - nwgat
Ini hanya menunjukkan kemajuan untuk file individu, itu tidak menyadari apakah suatu cp adalah menyalin direktori secara rekursif atau tidak. - Flimm
Perang ini berganti nama untuk maju. Alat hebat! - sebastian


Ada alat yang disebut progress di repositori yang mampu memeriksa berbagai perintah berbeda dan menampilkan info kemajuan untuk mereka.

Instal menggunakan perintah

sudo apt-get install progress

Alat ini dapat digunakan seperti itu:

cp bigfile newfile & progress -mp $!

Keluaran:

[11471] cp /media/Backup/Downloads/FILENAME.file 
        29.9% (24.2 MiB / 16 MiB)

10
2017-09-26 22:35





Seperti banyak yang mengatakan, cp tidak menyertakan fungsi ini.

Hanya untuk membuang $ 0,02 saya, yang biasanya saya lakukan dengan situasi penyalinan yang sepele (yaitu tidak -R):

  1. Lihat seberapa besar file dan ingat

  2. Mulai menyalin

  3. Buka terminal lain

  4. Menjalankan watch ls -lh DIR di direktori tempat targetnya

Ini dapat membuat saya diperbarui pada ukuran file target, dengan kerumitan minimal.

Sebagai alternatif untuk situasi yang kurang sepele, mis. secara rekursif menyalin direktori, Anda dapat menggunakan watch du -hs DIR untuk melihat ringkasan ukuran DIR. Namun du dapat membutuhkan waktu lama untuk menghitung dan bahkan dapat memperlambat penyalinan, sehingga Anda mungkin ingin menggunakannya -n INTERVAL argumen untuk diperhatikan sehingga trade-off dapat diterima.

Memperbarui: Jika Anda menggunakan wild-card dengan perintah yang digunakan dengan jam tangan, mis. watch du -hs backup/*, jangan lupa untuk mengutip:

watch "du -hs backup/*"

jika tidak, wild-card akan diperluas hanya sekalisaat ditonton dimulai jadi du tidak akan melihat file / subdirektori baru.


6
2017-11-16 13:20



Tidak menjawab bagian "kecepatan", meskipun ... - Alois Mahdal