Jika tidak, apakah ada utilitas baris perintah alternatif yang dapat mencapai ini?
Jika tidak, apakah ada utilitas baris perintah alternatif yang dapat mencapai ini?
Jawaban:
Meskipun cp
tidak memiliki fungsi ini, Anda dapat menggunakannya 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 menampilkan file ke stdout *, yang Anda arahkan ke file menggunakan >
operator. Secara bersamaan, ia mencetak informasi tentang perkembangan 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 menginstal pv (sebagai alternatif, ketik sudo apt-get install pv
) pada sistem Anda.
*: Bit teknis
Ada tiga aliran data penting dalam sistem seperti-unix: stdout (output standar), stderr (standard error) dan stdin (input standar). Setiap program memiliki ketiganya. The >
operator redirection pengalihan keluaran program untuk file. Tanpa argumen, seperti yang Anda lihat di atas, >
mengarahkan output standar program ke file. cp
pada dasarnya tidak ada yang lebih menarik dari
cat source > destination
(Di mana cat
hanya membaca file dan mencetaknya ke stdout). pv
seperti kucing, tetapi jika Anda mengarahkan ulang aliran outputnya di tempat lain, itu akan mencetak informasi kemajuan ke stdout sebagai gantinya.
Lihatlah man pv
untuk mempelajari lebih lanjut tentang itu.
Opsi lain, seperti yang disarankan DoR dalam jawaban ini , adalah 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 menjaga hak akses file / kepemilikan sambil menunjukkan kemajuan.
alias cp="rsync -avz"
cp sudah usang.
pv
, Anda bisa mengintip /proc/PID of cp/fd
dan /proc/PID of cp/fdinfo
mencari tahu kemajuan. (Terserah Anda untuk menyimpulkan kecepatan.) Saya menggunakan teknik ini untuk menonton updatedb
.
-z
mungkin seharusnya hanya digunakan untuk salinan jaringan; mengompresi dan mendekompresi data untuk salinan lokal adalah overhead murni.
rsync
pastikan untuk tidak menambahkan trailing /
ke jalur sumber (atau menghapus jika mis. Penyelesaian bash meletakkannya di sana secara otomatis). Kalau tidak, Anda akan mendapatkan hasil yang berbeda dari saat menggunakan cp
(atau gcp
).
Tidak ada. Lihat di sini mengapa. Meskipun lebih dari yang Anda butuhkan, rsync
memiliki --progress
parameter. The -a
akan terus perizinan, dll, dan -h
akan 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)
-r
flag untuk mengembalikan direktori. Ia bahkan dapat disebut sebagai pengganti langsung untuk cp:alias cp="rsync -ah --progress"
--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 dengan sedikit lebih bijaksana IMHO IMHO.
Jika Anda ingin melihat apakah file Anda ditransfer dengan benar, Anda dapat menggunakan gcp
dan gcp
seperti cp tetapi secara default memberi Anda bilah progres sehingga Anda dapat melihat apa yang sedang disalin. Sebagai catatan wiki program , gcp
memiliki beberapa fitur yang bermanfaat seperti
- indikasi perkembangan transfer
- penyalinan terus menerus karena kesalahan (lewati ke file berikutnya)
- copy status logging: gcp mencatat semua tindakannya sehingga memungkinkan untuk mengetahui file mana yang telah berhasil disalin
- nama mangling untuk menangani batasan sistem file target (misalnya penghapusan karakter yang tidak kompatibel "*" atau "?" pada FAT)
Namun, bahkan ketika bilah kemajuan telah mencapai 100% saat menggunakan alat ini, Anda harus menunggu sampai terminal Anda muncul kembali sebelum mengeluarkan media Anda dengan aman sehingga Anda dapat memastikan bahwa proses transfer telah berhasil diselesaikan.
gcp
digunakan untuk menyalin file dan memiliki opsi seperti --preserve
sehingga berbagai atribut dan izin dapat dipertahankan dan --recursive
agar seluruh direktori dapat disalin. Informasi lebih lanjut tentang opsi dapat ditemukan dengan memasukkan man gcp
atau dengan pergi ke halaman manual Ubuntu online . Tutorial juga tersedia di situs ini .
Instal gcp
dari repositori dengan
sudo apt-get install gcp
( Catatan : di Ubuntu 12.10 titik 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 dengan
gcp -rv ~/Podcasts /media/Mik2
Output sampel dari gcp
dengan progress bar:
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 dibahas 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
sebelum memulai gcp. Jika mesin tidak memiliki kepala maka Anda harus memulai xsession menjadi framebuffer virtual atau semacamnya, pada saat itu Anda mungkin harus mencari program lain
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.
Saya mendapatkan tendangan dari menggunakan CURL untuk tujuan yang tepat ini. Halaman manual mencantumkan protokol "FILE" sebagai didukung, jadi gunakan saja seperti protokol lain di URL:
curl -o destination FILE://source
Kecepatan, kemajuan, sisa waktu, dan banyak lagi - semuanya dalam format yang umum.
pv
, bahwa itu tidak akan menyimpan izin.
Meskipun tidak menampilkan kecepatan, saat menyalin beberapa file, -v
opsi ke cp
perintah akan memberi Anda info kemajuan. misalnya
cp -rv old-directory new-directory
Kernel tahu sebagian besar data seperti kecepatan, dan seringkali juga persentase. Kernel modern mengekspos ini melalui sistem file / proc mereka.
showspeed dari https://github.com/jnweiger/showspeed menggunakan info itu. Itu dapat melampirkan 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)
...
pkill -USR1 dd
untuk dd
menunjukkan statusnya, opsi lain adalah watch -n 1 pkill -USR1 dd
membuatnya menunjukkan kemajuannya secara berkala (setiap detik).
Ada alat yang disebut progress
dalam repositori yang dapat memeriksa berbagai perintah yang berbeda dan menampilkan info kemajuan untuk mereka.
Instal menggunakan perintah
sudo apt-get install progress
Alat ini bisa digunakan seperti itu:
cp bigfile newfile & progress -mp $!
Keluaran:
[11471] cp /media/Backup/Downloads/FILENAME.file
29.9% (24.2 MiB / 16 MiB)
Meskipun pv
dapat menangani cp
tugas - tugas lokal , menggunakan dd
dengan pv
dapat menangani tugas - tugas lokal ( cp
) dan jarak jauh ( scp
).
dd if=path/to/source.mkv | pv | dd of=path/to/dest.mkv
Harap pastikan path/to/dest.mkv
pintu keluar olehtouch 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
Ganti di 100M
atas dengan ukuran sebenarnya dari file sumber Anda.
Meskipun scp
hampir tidak dapat menunjukkan kemajuan saat ini, menggunakan dd
dengan pv
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 yang terkait dengan perintah yang sedang berjalan dan menunjukkan kemajuan dan kecepatan: https://github.com/Xfennec/cv
cv -w
menampilkan statistik untuk semua operasi cp, mv dll
watch cv -q
bahkan lebih rapi
cp
menyalin direktori secara rekursif atau tidak.
Seperti yang banyak dikatakan, cp tidak termasuk fungsi ini.
Hanya dengan melemparkan $ 0,02, apa yang biasanya saya lakukan dengan situasi penyalinan sepele (yaitu tidak -R
):
Lihat seberapa besar file tersebut dan ingat
Mulai menyalin
Buka terminal lain
Jalankan watch ls -lh DIR
pada direktori di mana targetnya
Ini dapat membuat saya terus diperbarui pada ukuran file target, dengan kerumitan yang cukup minimum.
Sebagai alternatif untuk situasi yang kurang sepele, misalnya direktori penyalinan secara rekursif, Anda dapat menggunakan watch du -hs DIR
untuk melihat ringkasan ukuran DIR. Namun, du dapat memakan waktu lama untuk menghitung dan bahkan dapat memperlambat penyalinan, jadi Anda mungkin ingin menggunakan -n INTERVAL
argumen untuk menonton sehingga pertukaran dapat diterima.
Pembaruan: Jika Anda menggunakan wild-card dengan perintah yang digunakan dengan watch du, mis watch du -hs backup/*
. Jangan lupa mengutip:
watch "du -hs backup/*"
jika tidak, wildcard hanya akan diperluas sekali , ketika arloji dimulai sehingga du tidak akan melihat file / subdirektori baru.
dd status=progress
Opsi ditambahkan di GNU Coreutils 8.24+ (Ubuntu 16.04):
dd if=src of=dst status=progress
Terminal menunjukkan garis tipe:
462858752 bytes (463 MB, 441 MiB) copied, 38 s, 12,2 MB/s
Lihat juga: Bagaimana Anda memantau kemajuan dd?
Jika Anda memiliki rsync 3.1 atau lebih tinggi ( rsync --version
), Anda dapat menyalin (cp -Rpn) sambil mempertahankan izin dan kepemilikan, kambuh direktori, "no clobber," dan tampilkan kemajuan keseluruhan (bukan hanya kemajuan berdasarkan file), kecepatan salin, dan ( sangat kasar) perkiraan sisa waktu dengan:
sudo rsync -a --info=progress2 --no-i-r /source /destination
Perhatikan bahwa sudo hanya diperlukan jika berurusan dengan direktori / file yang tidak Anda miliki. Selain itu, tanpa --no-i-r
, persentase dapat diatur ulang ke angka yang lebih rendah di beberapa titik selama penyalinan. Mungkin versi rsync nantinya akan default-no-ir dengan info = progres2, tetapi tidak dalam versi 3.1.2 saat ini.
Saya telah menemukan bahwa persentase dan sisa waktu terlalu berlebihan ketika menyalin ke direktori yang sudah berisi file (mis. Seperti ketika Anda biasanya menggunakan cp -n "no clobber").
Gunakan skrip 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
}
Ini akan terlihat seperti:
% cp_p /home/echox/foo.dat /home/echox/bar.dat
66% [===============================> ]
Bergantung pada apa yang ingin Anda lakukan, Komandan Tengah Malam ( mc
) mungkin jawabannya. Saya terkejut itu belum disebutkan.
Alat suka pv
atau rsync
bagus untuk menampilkan progres transfer satu file besar, tetapi ketika harus menyalin seluruh direktori / pohon, mc
hitung ukurannya dan kemudian tampilkan progresnya dengan sangat baik. Plus itu tersedia di luar kotak pada sebagian besar sistem.
satu opsi lagi untuk mempertahankan atribut bisa (jika source
folder itu akan dibuat di destination
)
tar -c source | pv -e -t -p -r | tar -C destination -x
semoga semoga bermanfaat bagi seseorang. Untuk memperkirakan waktu transfer, ini dapat dicapai dengan melakukan do -s source
di muka dan meneruskannya sebagai -s <size>
parameter pv
.
-f -
berlebihan. tar
Output default untuk c
dan input untuk x
adalah stdout dan stdin.
Periksa kode sumber untuk progress_bar di repositori git di bawah ini
https://github.com/Kiran-Bose/supreme
Juga mencoba paket bash script khusus tertinggi
Unduh file deb dan instal dalam distribusi berbasis debian atau unduh file sumber, modifikasi dan gunakan untuk distro lain
Tinjauan fungsionalitas
(1) Buka Aplikasi ---- Firefox ---- Kalkulator ---- Pengaturan
(2) Kelola File ---- Pencarian ---- Navigasi ---- Akses cepat
|----Select File(s)
|----Inverse Selection
|----Make directory
|----Make file
|----Open
|----Copy
|----Move
|----Delete
|----Rename
|----Send to Device
|----Properties
(3) Kelola Telepon ---- Memindahkan / Menyalin dari telepon ---- Memindahkan / Menyalin ke telepon ---- Menyinkronkan folder
(4) Kelola USB ---- Pindahkan / Salin dari USB ---- Pindahkan / Salin ke USB
pv tahu cara menonton deskriptor file yang diberi pid, apakah itu cp atau sesuatu yang lain
Dari dokumentasi:
(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
Contoh:
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
tidak menangani izin dengan cara yang sama seperticp
halnya ... (berdasarkan satu tes cepat saya mencoba:pv
tidak menyalin bit eksekusi di ..rsync
lakukan.