Câu hỏi Làm thế nào để hiển thị tiến trình chuyển giao và tốc độ khi sao chép các tập tin với cp?


Nếu không, có bất kỳ tiện ích dòng lệnh thay thế nào có thể đạt được điều này không?


274
2017-12-14 04:48


gốc




Các câu trả lời:


Trong khi cp chưa có chức năng này, bạn có thể sử dụng pv để làm điều này:

pv my_big_file > backup/my_big_file

Lưu ý: phương pháp này sẽ mất quyền và quyền sở hữu tệp. Các tệp được sao chép theo cách này sẽ có cùng quyền như thể bạn đã tự tạo chúng và sẽ thuộc về bạn.

Trong ví dụ này, pv về cơ bản chỉ xuất ra tệp để stdout *, mà bạn chuyển hướng đến một tệp bằng cách sử dụng > nhà điều hành. Đồng thời, nó in thông tin về tiến trình đến thiết bị đầu cuối khi bạn làm điều đó.

Đây là những gì nó trông giống như:

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

Bạn có thể cần phải Cài đặt pv (cách khác, gõ sudo apt-get install pv) trên hệ thống của bạn.


*: Bit kỹ thuật

Có ba luồng dữ liệu quan trọng trong một hệ thống giống như Unix: stdout (đầu ra tiêu chuẩn), stderr (lỗi chuẩn) và stdin (đầu vào tiêu chuẩn). Mỗi chương trình có cả ba, để nói chuyện. Các > nhà điều hành chuyển hướng chuyển hướng đầu ra chương trình sang một tệp. Không có đối số, như bạn thấy ở trên, > chuyển hướng một chương trình đầu ra tiêu chuẩn vào một tập tin. cp về cơ bản không có gì huyền ảo hơn

cat source > destination

(Ở đâu cat chỉ cần đọc một tập tin và in nó để stdout). pv cũng giống như con mèo, nhưng nếu bạn chuyển hướng luồng đầu ra của nó ở một nơi khác, nó sẽ in thông tin tiến trình thành stdout thay thế.

Hãy xem man pv để tìm hiểu thêm về nó.


Một tùy chọn khác, như alt textDoR gợi ý trong câu trả lời này, là sử dụng rsync thay thế:

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

Điều này sẽ bảo vệ quyền / quyền sở hữu tệp trong khi hiển thị tiến trình.


204
2017-12-14 05:17



Nó có thể hoặc có thể không có ý nghĩa (tùy thuộc vào tình hình), nhưng pv không xử lý các quyền giống như cách cp không ... (dựa trên một thử nghiệm nhanh tôi đã thử: pv không sao chép bit thực thi trên .. rsync đã làm. - Peter.O
IMO: alias cp="rsync -avz" cp đã lỗi thời. - Marco Ceppi♦
Nếu bạn giống tôi, và quên đi pv, bạn có thể đi vào /proc/PID of cp/fd và /proc/PID of cp/fdinfo để tìm ra tiến bộ. (Đó là vào bạn để suy ra tốc độ.) Tôi sử dụng kỹ thuật này để xem updatedb. - Thanatos
Vâng, -z có lẽ chỉ nên được sử dụng cho các bản sao mạng; nén và giải nén dữ liệu cho một bản sao cục bộ là chi phí tinh khiết. - Matthew Read
@Rodrigo rsync -avzP là những gì bạn sẽ muốn sử dụng. - Marco Ceppi♦


Không có. Xem đây tại sao. Mặc dù nó không nhiều hơn bạn cần, rsync có một với --progress tham số. Các -a sẽ giữ quyền, vv, và -h sẽ là con người có thể đọc được.

rsync -ah --progress source destination

Đầu ra sẽ trông giống như sau:

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



Điều này hoạt động tốt trong Ubuntu hiện tại (14.10). Nó cũng hỗ trợ -r gắn cờ để tái sử dụng thư mục. Nó thậm chí có thể được đặt tên như là một thay thế trực tiếp cho cp: alias cp="rsync -ah --progress" - rustyx
Hoạt động sưng lên trên OS X, với tiền thưởng là có thể sử dụng các công cụ đi kèm với hệ thống. - Ivan X
điều này thật tuyệt, đầu ra trông giống như filename MB-copied MB-speed time-remaining) - Rudolf Olah
tôi thích thay thế này tốt hơn so với pv, đặc biệt vì rsync là một phần của cài đặt tiêu chuẩn - Joao Costa
@bartekbrak cảm ơn bạn đã chia sẻ. Tôi hiện đang sử dụng phiên bản homebrew macOS 10.12.x chạy trên nền tảng rsync 3.1.2 và sử dụng --progresslàm cho đầu của tôi quay xem tất cả các màn hình đầu ra trong thiết bị đầu cuối. Vì vậy, những người đến đây từ tìm kiếm từ khóa AOL, rsync -ah --info=progress2 [source] [destination]  trình bày kết quả đầu ra trong một ít IMHO lành mạnh hơn. - Chris


Nếu bạn muốn xem liệu các tệp của mình có đang truyền chính xác hay không, bạn có thể sử dụng gcp và gcp giống như cp nhưng theo mặc định cung cấp cho bạn một thanh tiến trình để bạn có thể xem những gì đang được sao chép. Như chương trình wiki ghi chú, gcp có một số tính năng hữu ích như

  • -chỉ thị tiến trình truyền
  • sao chép liên tục do lỗi (bỏ qua tệp tiếp theo)
  • ghi nhật ký trạng thái sao chép: gcp ghi lại tất cả các hành động của nó để có thể biết tệp nào đã được sao chép thành công
  • tên mangling để xử lý các giới hạn hệ thống tập tin đích (ví dụ xóa các ký tự không tương thích "*" hoặc "?" trên FAT)

Tuy nhiên, ngay cả khi thanh tiến trình đã đạt 100% khi sử dụng công cụ, bạn phải chờ cho đến khi lời nhắc thiết bị đầu cuối xuất hiện lại trước khi xóa an toàn phương tiện để bạn có thể đảm bảo quá trình chuyển thành công.

gcp được sử dụng để sao chép các tệp và có các tùy chọn như --preserve để các thuộc tính và quyền khác nhau có thể được bảo toàn và --recursiveđể toàn bộ thư mục có thể được sao chép. Bạn có thể tìm thêm thông tin về các tùy chọn của nó bằng cách nhập man gcp hoặc bằng cách đi đến Ubuntu manpages trực tuyến. Hướng dẫn cũng có sẵn trên trang web này.

cài đặt, dựng lên gcp từ các kho lưu trữ với

sudo apt-get install gcp

(chú thích: trong Ubuntu 12.10, điểm automount mới là, ví dụ, /media/user/usbdisk)

Bạn có thể sao chép tệp vào phương tiện của mình bằng cách nhập

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

và sao chép một thư mục vào phương tiện của bạn bằng

gcp -rv ~/Podcasts /media/Mik2

Đầu ra mẫu từ gcp với thanh tiến trình:

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

Tất nhiên bạn có thể chỉ định nhiều tệp hoặc thư mục để sao chép vào đĩa của mình và có rất nhiều tùy chọn khác được đề cập trong man gcp.


84
2017-10-15 11:09



Có lỗi với nó trên ssh dbus.exceptions.DBusException: org.freedesktop.DBus.Error.NotSupported: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11 - msa7
nếu bạn có một màn hình X11 mở trên máy bạn chỉ có thể đặt export DISPLAY=:0.0 trước khi bắt đầu gcp. Nếu máy không có đầu thì bạn phải bắt đầu một xsession thành một bộ đệm khung hình ảo hoặc một cái gì đó, tại thời điểm đó bạn có lẽ nên tìm một chương trình khác - user292067
gcp là khá tốt nhưng yêu cầu DBUS / X là lẻ. Tôi đã xử lý việc này qua SSH bằng cách sử dụng chuyển tiếp ssh: ssh -X user@host và điều đó cho phép tôi chạy nó. - Oli♦


Tôi nhận được một cú đá từ việc sử dụng cURL cho mục đích chính xác này. Trang người dùng liệt kê giao thức "FILE" như được hỗ trợ, do đó, chỉ cần sử dụng giao thức này như bất kỳ giao thức nào khác trong URL:

curl -o destination FILE://source

Tốc độ, tiến độ, thời gian còn lại và hơn thế nữa - tất cả đều ở định dạng quen thuộc.


54
2018-02-02 09:00



Điều này đặc biệt tuyệt vời trong các môi trường mà bạn bị cấm cài đặt các công cụ mới và nơi rsync không khả dụng.
Rực rỡ, điều này đã có được một hack phải biết! - ionreflex
Câu trả lời hay! Tài giỏi! - 9301293
Điều này có lẽ có cùng nhược điểm như pv, nó sẽ không lưu quyền. - Ploni


Mặc dù nó không hiển thị tốc độ, khi sao chép nhiều tệp, -v tùy chọn cho cp lệnh sẽ cung cấp cho bạn thông tin tiến trình. ví dụ.

cp -rv old-directory new-directory

22
2017-12-14 17:17



Thông tin tiến trình? Đây chỉ là đầu ra dài dòng. Để cung cấp thông tin tiến độ, ít nhất bạn cũng cần phải có bao nhiêu tệp hoặc thậm chí các tệp nào cần được sao chép. - Julian F. Weinert


Hạt nhân biết hầu hết các dữ liệu như tốc độ, và thường cũng tỷ lệ phần trăm. Hạt nhân hiện đại phơi bày điều này thông qua hệ thống tập tin / proc của họ.

showpeed từ https://github.com/jnweiger/showspeed sử dụng thông tin đó. Nó có thể đính kèm với các chương trình đang chạy và cung cấp các bản cập nhật định kỳ như thế này:

$ 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



Đẹp nhất. Làm thế nào nó làm việc ra tỷ lệ phần trăm mặc dù? Tôi đoán chỉ trong trường hợp của các tập tin mở như chỉ đọc? Và nó có thể sẽ không hoạt động trong trường hợp truy cập rải rác. - j_kubik
Trong trường hợp này, bạn cũng có thể sử dụng một thiết bị đầu cuối khác để chạy pkill -USR1 dd để làm cho dd hiển thị trạng thái của nó, một tùy chọn khác sẽ là watch -n 1 pkill -USR1 dd để làm cho nó hiển thị tiến độ của nó định kỳ (mỗi giây). - Yaron
Đúng. Nhiều công cụ có cách tích hợp để báo cáo thống kê theo thời gian. dd cũng không ngoại lệ. Triển khai hiện đại có tùy chọn trạng thái = progess. Showspeed là một giải pháp "một công cụ cho một mục đích" kiểu cổ điển unix - giống như pv. Nhưng nó có các giai đoạn khác nhau: Hãy suy nghĩ về các chén bơm một tập tin thông qua ghostscript hoặc bạn muốn biết ETA cho một cp hoặc tar đang diễn ra. Nó có thể được 95% thực hiện đã sau một vài giờ và có thể bạn không muốn khởi động lại mà chỉ để thêm pv ... Phân tán truy cập sẽ không hoạt động tốt. Chỉ cho thấy các mẫu tìm kiếm vị trí. - Jürgen Weigert


Trong khi pv có thể đối phó với địa phương cp nhiệm vụ, sử dụng dd với pv có thể đối phó với cả hai địa phương (cp) và điều khiển từ xa (scp) nhiệm vụ.

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

Hãy đảm bảo path/to/dest.mkv thoát khỏi touch path/to/dest.mkv

Điều này có thể hiển thị tiến độ, nhưng nếu bạn muốn thông tin tỷ lệ phần trăm,

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

Thay thế 100M ở trên với kích thước thực của tệp nguồn của bạn.

Ở đây có phần từ xa

Trong khi scp khó có thể hiển thị tiến độ hiện tại, sử dụng dd với pv là một miếng bánh.

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

11
2018-01-05 08:08



Mới hơn dd có status=progress: askubuntu.com/a/824895/52975 - Ciro Santilli 新疆改造中心 六四事件 法轮功