Apakah mungkin untuk melihat kecepatan cp dan persen disalin?
251
Saya mengalami masalah saat menyalin file besar menggunakan nautilus (macet). Saya perlu menyalin, menggunakan cp. Saya ingin tahu apakah ada parameter yang menunjukkan% disalin dan juga kecepatan transfer.
Anda bisa menggunakan rsyncbukan cp. Ini memiliki --progressopsi.
frostschutz
2
Midnight Commanderjuga berfungsi dengan baik, dan memiliki UI berbasis teks yang cantik dengan bilah kemajuan, tetapi mungkin tidak diinstal. Coba mcpada command prompt. Juga, jelas, tidak cp.
CVn
3
Menggunakan rsyncdengan --progresshanya membuat saya mencari tahu apa yang terjadi. Itu macet ketika mencapai 100%, dan kemudian bertahan beberapa menit pada akhirnya. Saya pikir sama dengan yang terjadi pada nautilus. Pokoknya itu sudah pertanyaan lain, jadi jawaban terbaik untuk pertanyaan ini adalah rsync --progress, itu menunjukkan ukuran,%, kecepatan dan waktu yang berlalu.
yzT
2
satu masalah dengan rsync adalah ia berjalan lebih lambat dari salinan murni. Di server besar saya, perbedaannya masing-masing adalah 60MB / s dan 300MB / s.
pdwalker
1
@pdwalker bahkan dengan -Wopsi itu? pada semua host saya rsynchampir secepat cp... begitu dekat saya secara teratur menggunakan rsyncbukan cp.
Skaperen
Jawaban:
193
rsyncmemiliki bendera yang disebut progress2yang menunjukkan persentase keseluruhan:
--info = progress2 masih belum membuatnya menjadi repositori default dan ini dia 2015. Sepertinya ide yang bagus.
Lonniebiz
1
--info=progress2akhirnya disertakan version 3.1.0 protocol version 31. Mungkin Anda bisa mengedit jawaban Anda, yzT.
Sopalajo de Arrierez
1
Saya perhatikan --info=progress2bahwa rsync sangat cepat! 200 MB / s, sementara Windows tidak lebih dari 90 MB / s!
ReneFroger
1
@ReneFroger walaupun itu mungkin kecepatan sebenarnya (tergantung pada perangkat), seringkali di Linux kecepatan cepat itu benar-benar palsu, dan setelah salinan selesai sistem masih menulis ke perangkat, tidak seperti pada Windows yang Anda dapat mengeluarkan perangkat segera. Jika Anda menyalin file besar, Anda dapat melihat bagaimana ia memulai dengan kecepatan cepat tetapi kemudian turun sampai yang standar.
yzT
7
itu bekerja untuk saya dengan adil --progress. rsync versi 3.0.9
adrianTNT
103
Jika Anda mengizinkan alat lain dari cpitu pasti mungkin. Untuk satu file dapat Anda gunakan pv. Ini adalah alat kecil yang menyediakan statistik bagus.
pv inputfile > outputfile
Jika Anda memiliki banyak file atau direktori, Anda dapat menggunakan tar:
tar c sourceDirectory | pv | tar x -C destinationDirectory
Anda dapat membungkusnya dalam fungsi shell. Ini kurang untuk mengetik dan Anda mendapatkan semantik yang dekat dengan yang ada cp. Inilah fungsi yang sangat sederhana (dan bukan anti-kesalahan!):
cpstat () {
tar c "$1" | pv | tar x -C "$2"
}
Perhatikan bahwa beberapa versi tartidak mendukung sintaks yang disebutkan di atas (misalnya Solaris tar) dan Anda harus menggunakan varian berikut:
Ini akan memberi Anda kecepatan transfer, tetapi bukan ETA, karena pvtidak tahu berapa banyak data yang akan datang melalui pipa. Anda dapat menentukan ini menggunakan -s. Misalnya pertama kali melakukan du -sh sourceDirectoryuntuk mendapatkan (kasar) ide, dan kemudian menyebarkannya ke pv, seperti ini: pv -s 100m.
Jan Fabry
1
--info = progress2 memberi Anda statistik kemajuan tingkat direktori.
AlexLordThorsen
vbuf(debian, ubuntu) sedikit lebih baik daripada pv, mungkin karena buffer cincin virtualnya
Skaperen
@ Skaperen saya tidak tahu vbuf. Tetapi sepertinya Debian tidak stabil saat ini dan oleh karena itu sering tidak tersedia di Server yang biasanya menjalankan Debian stable.
Marco
58
rsync bekerja paling baik untuk menunjukkan kemajuan selama kemajuan penyalinan.
Seperti yang dijelaskan dalam jawaban lain, cp tidak menyediakan fungsionalitas itu. Namun, progres (sebelumnya disebut cv) adalah alat kecil yang sangat membantu dalam menyediakan fitur yang hilang ini.
Alat ini dapat digambarkan sebagai perintah Tiny Dirty Linux Only * C yang mencari perintah dasar coreutils (cp, mv, dd, tar, gzip / gunzip, cat, ...) saat ini berjalan pada sistem Anda dan menampilkan persentase yang disalin data.
Saya telah menggunakannya selama beberapa bulan terakhir dan ini solid.
Jika Anda tidak menginstal progress, Anda dapat menginstalnya dari repositori, misalnya dalam CentOSdengan perintah ini: yum -y install progress.
Kemudian setelah Anda menjalankan cpperintah di latar belakang, atau setelah menjalankan secara cpnormal, buka terminal lain, jadi coba saja perintah ini:
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
Lari:
export FORCE_UNSAFE_CONFIGURE=1
./configure
make
Salin kedua file tersebut cpdan mvletakkan di bawah coreutils-8.21/src/ke /usr/local/bin:
Melihat posting ini agak lama. Tetapi ketika saya membuat solusi untuk masalah yang ada, saya pikir saya akan memposting solusi saya.
Skenario: Kami memiliki struktur direktori yang sangat besar yang ingin kami salin, jadi kami mengeluarkan perintah cp -R sourcedir destdir di satu jendela terminal.
Buka jendela terminal lain atau dorong proses ke latar belakang (Ctrl+Z,bg<CR>), lalu mari kita buat indikator kemajuan dengan cara ghetto:
Kami pertama-tama mendapatkan ukuran total dari struktur direktori yang ingin kami salin, Anda lakukan ini dengan:
du -sh /path/sourcedirectory/
Konversikan hasilnya menjadi gigabytes (G), lalu gantilah n dengan hasil yang Anda dapatkan di sumber variabel. Setelah Anda memasukkan sourcesize dan destdir (direktori tujuan), jalankan perintah di bawah ini.
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
Ini akan mencetak progres setiap 10 detik dengan pesan-pesan seperti:
Saya sadar bahwa solusi ini tidak membahas kecepatan penyalinan, tetapi mungkin untuk menambahkannya dengan memperluas perintah di atas, mungkin membuatnya menjadi skrip bash sehingga akan lebih mudah dibaca. Misalnya dengan memeriksa berapa banyak data yang disalin pr. Pada unit waktu, kecepatan harus sepele untuk dihitung dan ditampilkan.
Ini sebenarnya cocok untuk kasus penggunaan saya, jadi terima kasih telah mempostingnya! Saya ingin tahu tentang kemajuan menyalin direktori besar dengan ribuan file, bukan hanya satu file, jadi solusi lain tidak benar-benar membantu saya.
Ibrahim
Ini hebat, terutama dalam kasus-kasus seperti yang saya alami saat ini: Remotely memulai pekerjaan besar-mv untuk memindahkan terrabytes cadangan dari satu kumpulan penyimpanan ke yang lain, tanpa memikirkan implikasi sebelumnya. Sekarang saya dapat dengan mudah latar belakang proses dan mengintipnya. Luar biasa!
Riley
8
Untuk meningkatkan jawaban Marco, hari ini saya menulis versi ini cpstat, sehingga Anda dapat menyalin banyak direktori dan menggunakan parameter terakhir sebagai jalur tujuan. Perhatikan bahwa jika Anda menggunakan jalur relatif dalam sebagai sumber, Anda dapat, berkat tar, secara otomatis membuat pohon direktori ketergantungan yang sama.
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 - )
;}
Meskipun rsyncakan memberi Anda beberapa statistik kemajuan, jika Anda menginginkan bilah kemajuan yang harus Anda gunakan pv.
Anda dapat menggunakan cpv, pembungkus pvdengan sintaks yang lebih mudah, lebih mirip dengan yang cpdapat Anda gunakan untuk menyalin direktori secara rekursif
Alat ini adalah perintah utilitas Linux yang mencari perintah dasar coreutils (cp, mv, dd, tar, gzip / gunzip, cat, dll.) Yang sedang berjalan di sistem Anda dan menampilkan persentase data yang disalin:
Ini sudah disarankan oleh @AmrMostafa pada November '14.
Dubu
2
Saya hanya punya kasus di mana cp lebih atau kurang diblokir karena bug FUSE di sistem file penerima.
Jika Anda tidak bisa begitu saja beralih dari cp (yaitu karena --sparse = selalu) dan menginginkan sesuatu yang sebenarnya dapat diandalkan untuk kemajuan, buka / proc.
VCP - menyalin file dalam antarmuka kutukan (Tampilkan Bilah Kemajuan di Linux).
KETERANGAN: vcp menyalin file dan direktori dalam antarmuka kutukan, dengan hanya teks yang tersedia. opsi dan outputnya mirip dengan BSD cp sambil menambahkan beberapa fitur baru.
Ini memberikan informasi tentang:
file disalin dan dibiarkan menyalin
data tertulis dan total ukuran data
data ditulis setiap detik
dua bilah status, satu menunjukkan status file saat ini, status total lainnya (kecuali dengan 1 file, keduanya menunjukkan saat ini), dan persentase
rsync
bukancp
. Ini memiliki--progress
opsi.Midnight Commander
juga berfungsi dengan baik, dan memiliki UI berbasis teks yang cantik dengan bilah kemajuan, tetapi mungkin tidak diinstal. Cobamc
pada command prompt. Juga, jelas, tidakcp
.rsync
dengan--progress
hanya membuat saya mencari tahu apa yang terjadi. Itu macet ketika mencapai 100%, dan kemudian bertahan beberapa menit pada akhirnya. Saya pikir sama dengan yang terjadi pada nautilus. Pokoknya itu sudah pertanyaan lain, jadi jawaban terbaik untuk pertanyaan ini adalahrsync --progress
, itu menunjukkan ukuran,%, kecepatan dan waktu yang berlalu.-W
opsi itu? pada semua host sayarsync
hampir secepatcp
... begitu dekat saya secara teratur menggunakanrsync
bukancp
.Jawaban:
rsync
memiliki bendera yang disebutprogress2
yang menunjukkan persentase keseluruhan:sumber
--info=progress2
akhirnya disertakanversion 3.1.0 protocol version 31
. Mungkin Anda bisa mengedit jawaban Anda, yzT.--info=progress2
bahwa rsync sangat cepat! 200 MB / s, sementara Windows tidak lebih dari 90 MB / s!--progress
. rsync versi 3.0.9Jika Anda mengizinkan alat lain dari
cp
itu pasti mungkin. Untuk satu file dapat Anda gunakanpv
. Ini adalah alat kecil yang menyediakan statistik bagus.Jika Anda memiliki banyak file atau direktori, Anda dapat menggunakan tar:
Anda dapat membungkusnya dalam fungsi shell. Ini kurang untuk mengetik dan Anda mendapatkan semantik yang dekat dengan yang ada
cp
. Inilah fungsi yang sangat sederhana (dan bukan anti-kesalahan!):Perhatikan bahwa beberapa versi
tar
tidak mendukung sintaks yang disebutkan di atas (misalnya Solaristar
) dan Anda harus menggunakan varian berikut:Anda menyebutnya seperti ini
Anda dapat meningkatkannya lebih lanjut, sehingga
pv
memberikan estimasi waktu yang tersisa.Solusi lain (seperti yang disebutkan frostschutz dalam komentar) adalah menggunakan rsync dengan
--progress
opsi:sumber
pv
tidak tahu berapa banyak data yang akan datang melalui pipa. Anda dapat menentukan ini menggunakan-s
. Misalnya pertama kali melakukandu -sh sourceDirectory
untuk mendapatkan (kasar) ide, dan kemudian menyebarkannya kepv
, seperti ini:pv -s 100m
.vbuf
(debian, ubuntu) sedikit lebih baik daripadapv
, mungkin karena buffer cincin virtualnyavbuf
. Tetapi sepertinya Debian tidak stabil saat ini dan oleh karena itu sering tidak tersedia di Server yang biasanya menjalankan Debian stable.rsync
bekerja paling baik untuk menunjukkan kemajuan selama kemajuan penyalinan.ex:
sumber
Seperti yang dijelaskan dalam jawaban lain, cp tidak menyediakan fungsionalitas itu. Namun, progres (sebelumnya disebut cv) adalah alat kecil yang sangat membantu dalam menyediakan fitur yang hilang ini.
Saya telah menggunakannya selama beberapa bulan terakhir dan ini solid.
sumber
Ya, dimungkinkan untuk menampilkan progres perintah
cp
pada terminal.Metode # 1: (gunakan
progress
)Buka terminal baru dan ketik
progress
itu akan menampilkan progrescp
perintah dan perintah lain seperti: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
Jika Anda tidak menginstal
progress
, Anda dapat menginstalnya dari repositori, misalnya dalamCentOS
dengan perintah ini:yum -y install progress
.Kemudian setelah Anda menjalankan
cp
perintah di latar belakang, atau setelah menjalankan secaracp
normal, buka terminal lain, jadi coba saja perintah ini:Lihat output:
Metode # 2: (gunakan tambalan
cp
)Atau unduh GNU
coreutils
dan tempel.Lari:
Salin kedua file tersebut
cp
danmv
letakkan di bawahcoreutils-8.21/src/
ke/usr/local/bin
:Atau salin menggunakan pengelola file Anda sebagai root
Tambahkan baris berikut ke
~/.bashrc
:Logout dan Login
Bilah progres dapat ditampilkan tanpa
–g
atau–progress-bar
seperti yang direkomendasikan oleh PenulisLihat output:
Sumber: linuxhelp
sumber
cp
tambalan: web.archive.org/web/20131115171331/http://beatex.org/web/…progress
perintahMelihat posting ini agak lama. Tetapi ketika saya membuat solusi untuk masalah yang ada, saya pikir saya akan memposting solusi saya.
Skenario: Kami memiliki struktur direktori yang sangat besar yang ingin kami salin, jadi kami mengeluarkan perintah cp -R sourcedir destdir di satu jendela terminal.
Buka jendela terminal lain atau dorong proses ke latar belakang
(Ctrl+Z,bg<CR>)
, lalu mari kita buat indikator kemajuan dengan cara ghetto:Kami pertama-tama mendapatkan ukuran total dari struktur direktori yang ingin kami salin, Anda lakukan ini dengan:
du -sh /path/sourcedirectory/
Konversikan hasilnya menjadi gigabytes (G), lalu gantilah n dengan hasil yang Anda dapatkan di sumber variabel. Setelah Anda memasukkan sourcesize dan destdir (direktori tujuan), jalankan perintah di bawah ini.
Ini akan mencetak progres setiap 10 detik dengan pesan-pesan seperti:
Saya sadar bahwa solusi ini tidak membahas kecepatan penyalinan, tetapi mungkin untuk menambahkannya dengan memperluas perintah di atas, mungkin membuatnya menjadi skrip bash sehingga akan lebih mudah dibaca. Misalnya dengan memeriksa berapa banyak data yang disalin pr. Pada unit waktu, kecepatan harus sepele untuk dihitung dan ditampilkan.
sumber
Untuk meningkatkan jawaban Marco, hari ini saya menulis versi ini
cpstat
, sehingga Anda dapat menyalin banyak direktori dan menggunakan parameter terakhir sebagai jalur tujuan. Perhatikan bahwa jika Anda menggunakan jalur relatif dalam sebagai sumber, Anda dapat, berkattar
, secara otomatis membuat pohon direktori ketergantungan yang sama.sumber
Tidak dalam versi standar
cp
.Anda bisa latar belakang cp dan daftar ukuran sambil menunggu
cp
selesai.Saya menggunakan perl ini untuk memantau pertumbuhan satu file tetapi berjalan secara eksternal ke cp (atau apa pun yang saya lakukan)
sumber
Saya menemukan ini untuk digunakan, bekerja sangat baik:
dari komentar oleh Mike pada pertanyaan bagaimana memeriksa kemajuan menjalankan cp
sumber
Meskipun
rsync
akan memberi Anda beberapa statistik kemajuan, jika Anda menginginkan bilah kemajuan yang harus Anda gunakanpv
.Anda dapat menggunakan
cpv
, pembungkuspv
dengan sintaks yang lebih mudah, lebih mirip dengan yangcp
dapat Anda gunakan untuk menyalin direktori secara rekursifAnda bisa mendapatkannya di sini
sumber
pv
. Temuan yang bagus!Menggunakan alat seperti
mc
(komandan tengah malam) bisa menjadi pilihan alternatif yang baik untuk jawaban lain.Ini adalah pengelola file sederhana yang menunjukkan Anda menyalin / memindah progres.
sumber
dd status=progress
Opsi ditambahkan di GNU Coreutils 8.24+ (Ubuntu 16.04):
Stdout adalah baris yang diperbarui secara berkala seperti:
Lihat juga: Bagaimana Anda memantau kemajuan dd? | Tanya Ubuntu
sumber
Solusi sederhana lainnya adalah dengan hanya menonton folder keluaran sebagai berikut:
Linux / Cygwin:
watch -n 10 --differences du -sk --apparent-size <WATCHED_FOLDER>
FreeBSD:
gnu-watch -n 10 --differences du -sk <WATCHED_FOLDER>
Utilitas praktis ini akan menjalankan
du
dan menyoroti perbedaannya.Salah satu solusi potensial lainnya adalah dengan menulis skrip sederhana yang memutar, memanggil,
du
dan mengeluarkan perkiraan kasar dari throughput.sumber
Alat ini adalah perintah utilitas Linux yang mencari perintah dasar coreutils (cp, mv, dd, tar, gzip / gunzip, cat, dll.) Yang sedang berjalan di sistem Anda dan menampilkan persentase data yang disalin:
https://github.com/Xfennec/cv
sumber
Saya hanya punya kasus di mana cp lebih atau kurang diblokir karena bug FUSE di sistem file penerima.
Jika Anda tidak bisa begitu saja beralih dari cp (yaitu karena --sparse = selalu) dan menginginkan sesuatu yang sebenarnya dapat diandalkan untuk kemajuan, buka / proc.
sumber
Halaman manual VCP: https://linux.die.net/man/1/vcp
Unduh vcp-2.2.tar.gz dari:
http://distfiles.gentoo.org/distfiles/vcp-2.2.tar.gz
Ketergantungan: curses.h (libncurses-dev).
Di Ubuntu, instal:
atau
INSTALL vcp:
Manual:
sumber