Jika tidak, apakah ada utilitas baris perintah alternatif yang dapat mencapai ini?
Jika tidak, apakah ada utilitas baris perintah alternatif yang dapat mencapai ini?
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 DoR 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.
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)
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 --recursive
sehingga 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
.
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.
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
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)
...
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.
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
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
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)
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
):
Lihat seberapa besar file dan ingat
Mulai menyalin
Buka terminal lain
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.