Saat memindahkan direktori besar menggunakan mv
, apakah ada cara untuk melihat kemajuan (%)? The cp
perintah pada gentoo memiliki -g
saklar yang menunjukkan kemajuan.
command-line
mv
progress-information
letronje
sumber
sumber
Jawaban:
Anda dapat membangun cp dan mv yang di-patch yang kemudian mendukung -g switch untuk menunjukkan kemajuan. Ada instruksi dan tambalan di halaman ini . Namun : Halaman ini memerintahkan Anda untuk melakukannya
yang menimpa cp dan mv asli. Ini memiliki dua kelemahan: Pertama, jika paket coreutils yang diperbarui tiba di sistem Anda, mereka ditimpa. Kedua, jika versi tambalan memiliki masalah, mereka mungkin merusak skrip dengan mengandalkan cp dan mv standar. Saya lebih suka melakukan sesuatu seperti ini:
yang menyalin file ke / usr / local / bin yang ditujukan untuk program yang dikompilasi pengguna dan memberi mereka nama yang berbeda. Jadi, ketika Anda menginginkan bilah kemajuan, Anda mengatakan
mvg -g bigfile /mnt/backup
dan menggunakan mv secara normal.Anda juga dapat melakukannya
alias mvg="/usr/local/mvg -g"
maka Anda hanya perlu mengatakanmvg bigfile /mnt/backup
dan langsung mendapatkan progress bar.sumber
Saya tidak suka gagasan untuk menimpa binari dari coreutil ketika ada solusi yang lebih sederhana, jadi inilah milik saya:
rsync : Rsync menyalin file dan memiliki
-P
saklar untuk bilah progres. Jadi jika Anda menginstal rsync, Anda bisa menggunakan alias sederhana di shellfile dotfile Anda:The downside adalah, bahwa rsync sedikit lebih lambat daripada cp, tetapi Anda harus mengukur ini dengan waktu dan memutuskan sendiri, saya bisa hidup dengan itu :-)
Script Shell : Script shell juga dapat membuat bilah progres. Saya menemukan ini beberapa waktu lalu di internet dan saya tidak ingat sumbernya:
Ini akan terlihat seperti:
bar :
bar
adalah skrip shell kecil untuk menampilkan bilah proses untuk semua jenis operasi (cp, tar, dll.). Anda dapat menemukan contoh di beranda proyek.Itu juga ditulis untuk shell bourne, sehingga akan berjalan di dekatnya di mana-mana.
sumber
bar
belum membungkusmv
.rsync
tidak menggantikanmv
(OP bertanya tentang) sepenuhnya, terutama ketika datang ke salinan cepat pada sistem file seperti copy-on-writebtrfs
.Ada alat baru yang disebut
progress
yang dapat menemukan keterangan yang terkait dengan perintah yang sedang berjalan dan menunjukkan kemajuan dan kecepatan: tersedia di sinimenampilkan statistik untuk semua operasi cp, mv dll
sumber
progress
setelah menginstal dan itu memberi saya kemajuan untukmv
perintah yang saya tunggu-tunggu. Terima kasih!sudo
(pengguna yang sama saya kira) - Anda juga dapat menggunakanwatch
untuk mengatakan apa yang terjadi setiap 2 detik:watch progress -w
watch progress -w
Anda juga dapat menggunakanprogress -m
Anda dapat menggunakan perintah penampil pipa
pv
untuk menampilkan bilah kemajuan:Saya sering menggunakan ini untuk menyalin file besar melalui sistem file jaringan yang terpasang (gabungkan dengan
gzip
dantar
). Kekurangannya adalah Anda hanya bisa menyalin satu file dan bukan direktori. Dan Anda harus memberi nama file baru, Anda tidak bisa hanya memberikan direktori tujuan seperticp
tidak. Namun penyalinan bukanpv
tujuan. Ini adalah alat yang ampuh dan melakukan lebih dari sekadar menyalin file. Lihat beranda untuk lebih banyak contohpv
.Opsi yang jauh lebih baik adalah menggunakan
rsync -aP
. Jika Anda inginmv
, tambahkan bendera--remove-source-files
. Tambahkan ini ke Anda.bashrc
jika Anda ingin sering menggunakan perintah:Kelemahan di sini adalah rsync hanya menunjukkan kemajuan, bukan bilah kemajuan.
sumber
tar cf - source-dir | pv | tar xf - -C out-dir
akan memberi Anda throughput seluruh direktori. Jika Anda tahu ukuran dan lulus-s
ke pv itu bisa memberi Anda kemajuan juga.Jika tujuan Anda adalah memindahkan / menyalin direktori dengan progress bar, tetapi menghindari GUI non-terminal, mc (Midnight Commander) adalah pilihan yang baik.
sumber
Solusi saya adalah menggunakan
rsync
. Itu dapat menyalin direktori, menghapus file sumber setelah salinan berhasil (sehingga "memindahkan" mereka) dan menampilkan laporan kemajuan, di antara banyak fitur lainnya (terutama menyinkronkan direktori yang disalin sebagian dan bekerja melalui jaringan.)Inilah cara saya memindahkan direktori dengan rsync, dengan laporan kemajuan:
Pastikan
$src
tidak tidak berakhir di garis miring terbalik, jika tidak Anda akan mendapatkan arti yang berbeda dibandingkan dengan GNUcp
.Yang
rm -r
di akhir diperlukan karena--remove-source-files
hanya menghapus file sumber, setelah masing-masing berhasil disalin, bukan direktori. The&&
memastikan untuk menjalankannya hanya jika rsync selesai dengan sukses. Jika Anda paranoid, Anda bisa menggantinya dengan beberapa jenis rekursifrmdir
, sepertifind $src -d -exec rmdir {} +
Satu-satunya kesalahan adalah bahwa
-P
opsi menunjukkan kemajuan untuk setiap file, bukan untuk seluruh operasi penyalinan. Ini mungkin tidak berguna jika Anda mencoba untuk memindahkan direktori dengan banyak file kecil. Versi pengembangan terbaru rsync memiliki flag alternatif--info=progress2
yang menunjukkan kemajuan untuk seluruh operasi.sumber
Untuk menghindari patch coreutil untuk menambahkan progress bar ke
mv
dancp
,gcp
(CoPier Goffi) adalah alternatif baru: http://wiki.goffi.org/wiki/Gcp/enUntuk menggunakan cara yang sama seperti
cp
dengan opsi-r
untuk recursivity dan-v
untuk verbosity.Menggunakan antrian file ketika beberapa perintah dipanggil secara bersamaan. Ini juga memungkinkan untuk merekam nama file yang disalin dalam log, lihat bagian halaman Source saving man untuk detailnya.
Berikut ini adalah tutorial yang bagus untuk memulai
gcp
: http://mylinuxbook.com/gcp-advanced-command-line-file-copier-inspired-by-cp/sumber
Pertama: Saya tidak pernah menyalin file besar tanpa menggunakan ionice, kecuali saya tahu bahwa saya tidak ingin menggunakan komputer selama setengah jam atau lebih.
Kedua: semua partisi saya dikoreksi sehingga penyalinan intrapartisi tidak memakan waktu. Jika itu adalah salinan panjang saya lakukan
du -sm
pada file dandf -m | grep copy_to_partition
. Kemudian jika ingin tahu berapa banyak waktu yang akan saya lakukandf
lagi dan lihat berapa banyak file yang disalin.sumber
Pada Mint saya, saya suka menggunakan gcp pada ini atau solusi keriting (yang sangat bagus)
Anda mungkin perlu menginstalnya
sudo apt-get install gcp
Dan tugas yang sangat bagus dan luar biasa untuk bilah kemajuan dengan info tentang
dalam format yang mudah dibaca adalah:
Juga, Anda mungkin perlu menginstalnya terlebih dahulu
sudo apt-get install curl
sumber
gcp
tidak mendukung pemindahan file, yaitu file sumber harus dihapus secara manual setelah penyalinan berhasil.Ini tidak memberi Anda bilah kemajuan, tetapi tekan
CTRL-T
dan Anda akan mengirimSIGINFO
kemv
, yang akan melaporkan file mana yang sedang dikerjakan dan seberapa jauh prosesnya. Cukup praktis untuk memilikinya untuk transfer file besar, mungkin tidak berguna untuk transfer dengan banyak file kecil.Contoh cepat:
sumber
INFO: unknown signal; killall -l lists signals.
Saya pikir SIGINFO hanya pada beberapa BSD, bukan pada POSIX standar.Gunakan
mv -v
untuk mencetak satu baris per file yang dipindahkan danpv -l
untuk mencetak kemajuan berdasarkan jumlah baris (dalam jumlah file yang berlaku).Anda akan membutuhkan
pv
(penampil pipa): http://www.ivarch.com/programs/pv.shtmlGunakan perintah berikut untuk mendapatkan jumlah file:
Perintah ini akan menampilkan informasi kemajuan berdasarkan jumlah file yang disalin. Ini berfungsi baik jika ada banyak file bertubuh kecil. Jika hanya ada beberapa file yang besar maka Anda tidak akan bersenang-senang.
Perhatikan bahwa
mv
pada partisi yang sama harus cepat.mv
ke partisi lain akan sama dengancp source target
diikuti olehrm source
. Jadi, inilah dua perintah untuk menyalin direktori dengan informasi kemajuan.untuk melaporkan kemajuan berdasarkan jumlah file yang disalin:
melaporkan kemajuan berdasarkan byte yang disalin:
Lihat di sini untuk perincian lebih lanjut: informasi kemajuan melalui pv untuk salinan direktori
sumber
Selalu saya akhirnya mencari jawaban ini setelah saya memulai perintah 'mv', pada titik mana saya tidak ingin memulainya lagi. Jika Anda berada dalam situasi ini, cara yang sangat sederhana untuk memantau kemajuan (atau untuk melihat apakah itu cukup jauh sehingga tidak layak untuk dibunuh) adalah dengan menjalankan:
Ini hanya akan mencetak ukuran direktori sehingga Anda dapat melihat berapa banyak data yang telah disalin, atau Anda dapat menjalankannya beberapa kali untuk melihat seberapa cepat data sedang ditransfer.
sumber