Nếu không, có bất kỳ tiện ích dòng lệnh thay thế có thể đạt được điều này?
Nếu không, có bất kỳ tiện ích dòng lệnh thay thế có thể đạt được điều này?
Câu trả lời:
Mặc dù cpkhông 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 của 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, pvvề cơ bản chỉ xuất ra tệp thành thiết bị xuất chuẩn * mà bạn chuyển hướng đến một tệp bằng >toán tử. Đồng thời, nó in thông tin về tiến trình tới 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 Cài đặt pv (cách khác, loại
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 tiêu chuẩn) và stdin (đầu vào tiêu chuẩn). Mỗi chương trình có tất 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 vào một tập tin. Không có đối số, như bạn thấy ở trên, >chuyển hướng đầu ra tiêu chuẩn của chương trình thành một tệp. cpvề cơ bản không có gì lạ hơn
cat source > destination
(nơi catchỉ cần đọc một tập tin và in nó ra thiết bị xuất chuẩn). pvcũ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 lên thiết bị xuất chuẩn.
Hãy xem man pvđể tìm hiểu thêm về nó.
Một tùy chọn khác, như
DoR 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ệ các quyền / quyền sở hữu tập tin trong khi hiển thị tiến trình.
alias cp="rsync -avz"cp đã lỗi thời.
pv, bạn có thể rình mò /proc/PID of cp/fdvà /proc/PID of cp/fdinfotìm hiểu tiến trình. (Tùy thuộc vào bạn để suy ra tốc độ.) Tôi sử dụng kỹ thuật này để xem updatedb.
-zcó 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í thuần túy.
rsyncđảm bảo không thêm dấu vết /vào đường dẫn nguồn (hoặc xóa nếu ví dụ bash hoàn thành đặt nó ở đó tự động). Nếu không, bạn sẽ nhận được kết quả khác với khi sử dụng cp(hoặc gcp).
Không có. Xem ở đây như tại sao. Mặc dù nó làm nhiều hơn bạn cần, rsynccó một --progresstham số. Các -asẽ giữ quyền, vv, và -hsẽ là con người có thể đọc được.
rsync -ah --progress source destination
Đầu ra sẽ trông giống như thế này:
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)
-rcờ để lặp lại các thư mục. Nó thậm chí có thể được đặt bí danh là một thay thế trực tiếp cho cp:alias cp="rsync -ah --progress"
--progresskhiến đầu óc tôi quay cuồng 🙃 xem tất cả màn hình đầu ra trong thiết bị đầu cuối. Vì vậy, những người đến đây từ các tìm kiếm từ khóa AOL, rsync -ah --info=progress2 [source] [destination] trình bày kết quả đầu ra một cách nhẹ nhàng hơn IMHO.
Nếu bạn muốn xem các tệp của mình có được chuyển chính xác hay không, bạn có thể sử dụng gcpvà gcpgiống như cp nhưng theo mặc định sẽ 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ư các ghi chú wiki của chương trình , gcpcó một số tính năng hữu ích như
- chuyển chỉ dẫn tiến trình
- sao chép liên tục về lỗi (chuyển sang tập tin tiếp theo)
- sao chép trạng thái ghi nhật ký: gcp ghi lại tất cả các hành động của nó để có thể biết tập tin nào đã được sao chép thành công
- xáo trộn tên để xử lý các giới hạn hệ thống tệp mục tiêu (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 đợi cho đến khi dấu nhắc thiết bị đầu cuối của bạn xuất hiện lại trước khi gỡ bỏ phương tiện của bạn một cách an toàn để bạn có thể đảm bảo quá trình chuyển đã kết thúc thành công.
gcpđược sử dụng để sao chép các tập tin và có các tùy chọn như --preservevậy để các thuộc tính và quyền khác nhau có thể được bảo tồn và --recursiveđể toàn bộ thư mục có thể được sao chép. Thông tin thêm về các tùy chọn của nó có thể được tìm thấy bằng cách nhập man gcphoặc bằng cách truy cập các trang web Ubuntu trực tuyến . Một hướng dẫn cũng có sẵn trên trang web này .
Cài đặt gcptừ kho với
sudo apt-get install gcp
( Lưu ý : trong Ubuntu 12.10, ví dụ: điểm tự động mới là /media/user/usbdisk)
Bạn có thể sao chép một tập tin vào phương tiện truyền thông của bạn 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 với
gcp -rv ~/Podcasts /media/Mik2
Đầu ra mẫu từ gcpvớ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 man gcp.
dbus.exceptions.DBusException: org.freedesktop.DBus.Error.NotSupported: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11
export DISPLAY=:0.0trước khi bắt đầu gcp. Nếu máy không đầu thì bạn phải bắt đầu xsession thành bộ đệm khung ảo hoặc thứ gì đó, tại thời điểm đó có lẽ bạn chỉ nên tìm một chương trình khác
gcplà khá tốt nhưng yêu cầu DBUS / X là số 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@hostvà điều đó cho phép tôi chạy nó.
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 man liệt kê giao thức "FILE" là được hỗ trợ, vì vậy chỉ cần sử dụng nó 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à nhiều hơn nữa - tất cả trong một định dạng quen thuộc.
pv, nó sẽ không lưu quyền.
Mặc dù tốc độ không hiển thị, nhưng khi sao chép nhiều tệp, -vtùy chọn vào cplệnh sẽ cung cấp cho bạn thông tin tiến trình. ví dụ
cp -rv old-directory new-directory
Nhân biết hầu hết các dữ liệu như tốc độ và thường là tỷ lệ phần trăm. Các 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ọ.
showspeed 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 đã chạy và cung cấp các 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)
...
pkill -USR1 ddđể ddhiển thị trạng thái của nó, một tùy chọn khác sẽ là watch -n 1 pkill -USR1 ddlàm cho nó hiển thị tiến trình của nó theo định kỳ (mỗi giây).
Có một công cụ được gọi progresstrong kho lưu trữ có thể kiểm tra các lệnh khác nhau và hiển thị thông tin tiến trình cho chúng.
Cài đặt nó bằng lệnh
sudo apt-get install progress
Công cụ này có thể được sử dụng như thế:
cp bigfile newfile & progress -mp $!
Đầu ra:
[11471] cp /media/Backup/Downloads/FILENAME.file
29.9% (24.2 MiB / 16 MiB)
Trong khi pvcó thể xử lý các cptác vụ cục bộ , sử dụng ddvới pvcó thể xử lý cả các tác vụ cục bộ ( cp) và từ xa ( scp).
dd if=path/to/source.mkv | pv | dd of=path/to/dest.mkv
Vui lòng đảm bảo path/to/dest.mkvlối thoát bằngtouch path/to/dest.mkv
Điều này có thể hiển thị tiến trình, 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 tin nguồn của bạn.
Trong khi scpkhó có thể hiển thị tiến độ hiện tại, sử dụng ddvới pvlà một miếng bánh.
ssh onemach@myotherhost dd if=path/to/source.mkv | pv -s 100M | dd of=path/to/dest.mkv
Có một công cụ mới gọi là cv có thể tìm thấy bất kỳ mô tả nào liên quan đến lệnh đang chạy và hiển thị tiến trình và tốc độ: https://github.com/Xfennec/cv
cv -w
xuất ra các số liệu thống kê cho tất cả các hoạt động cp, mv, vv đang chạy
watch cv -qthậm chí còn gọn gàng hơn
cpcó sao chép một thư mục đệ quy hay không.
Như nhiều người đã nói, cp không bao gồm chức năng này.
Chỉ cần ném 0,02 đô la của tôi, những gì tôi thường làm với các tình huống sao chép tầm thường (tức là không -R):
Xem tập tin lớn như thế nào và nhớ
Bắt đầu sao chép
Mở một thiết bị đầu cuối khác
Chạy watch ls -lh DIRtrên thư mục chứa mục tiêu
Điều này có thể giữ cho tôi cập nhật về kích thước tệp mục tiêu, với một rắc rối tối thiểu.
Thay thế cho các tình huống ít tầm thường hơn, ví dụ: sao chép các thư mục đệ quy, bạn có thể sử dụng watch du -hs DIRđể xem tóm tắt về kích thước DIR. Tuy nhiên, du có thể mất nhiều thời gian để tính toán và thậm chí có thể làm chậm quá trình sao chép, vì vậy bạn có thể muốn sử dụng -n INTERVALđối số để xem để có thể chấp nhận đánh đổi.
Cập nhật: Trong trường hợp bạn sử dụng thẻ đại diện với lệnh được sử dụng với watch du, ví dụ: watch du -hs backup/*đừng quên trích dẫn:
watch "du -hs backup/*"
nếu không, các ký tự đại diện sẽ chỉ được mở rộng một lần , khi đồng hồ được bắt đầu để du sẽ không xem các tệp / thư mục con mới.
dd status=progress
Tùy chọn được thêm vào GNU Coreutils 8.24+ (Ubuntu 16.04):
dd if=src of=dst status=progress
Thiết bị đầu cuối hiển thị một dòng loại:
462858752 bytes (463 MB, 441 MiB) copied, 38 s, 12,2 MB/s
Nếu bạn có rsync 3.1 trở lên ( rsync --version), bạn có thể sao chép (cp -Rpn) trong khi duy trì quyền và quyền sở hữu, lặp lại các thư mục, "không ghi đè" và hiển thị tiến trình tổng thể (thay vì chỉ tiến triển theo tệp), tốc độ sao chép và ( rất thô) thời gian ước tính còn lại với:
sudo rsync -a --info=progress2 --no-i-r /source /destination
Lưu ý rằng sudo chỉ cần thiết nếu xử lý các thư mục / tệp bạn không sở hữu. Ngoài ra, không có --no-i-rphần trăm, phần trăm có thể đặt lại về số thấp hơn tại một số điểm trong quá trình sao chép. Có lẽ các phiên bản sau của rsync sẽ được mặc định là no-ir với thông tin = Progress2, nhưng nó không có trong phiên bản 3.1.2 hiện tại.
Tôi đã thấy rằng tỷ lệ phần trăm và thời gian còn lại được đánh giá quá cao khi sao chép vào một thư mục đã chứa các tệp (ví dụ như khi bạn thường sử dụng cp -n "không ghi đè").
Sử dụng tập lệnh 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
}
Điều này sẽ trông giống như:
% cp_p /home/echox/foo.dat /home/echox/bar.dat
66% [===============================> ]
Tùy thuộc vào những gì bạn muốn làm, Midnight Commander ( mc) có thể là câu trả lời. Tôi ngạc nhiên khi nó chưa được đề cập.
Các công cụ thích pvhoặc rsynctốt để hiển thị tiến trình chuyển một tệp lớn, nhưng khi cần sao chép toàn bộ thư mục / cây, hãy mctính kích thước và sau đó hiển thị tiến trình rất độc đáo. Thêm vào đó, nó có sẵn ngoài hộp trên hầu hết các hệ thống.
một tùy chọn nữa để bảo toàn các thuộc tính có thể là (nếu sourcelà một thư mục, nó sẽ được tạo trong destination)
tar -c source | pv -e -t -p -r | tar -C destination -x
hy vọng nó có thể hữu ích cho ai đó Để có thời gian chuyển ước tính, điều này có thể đạt được bằng cách thực hiện do -s sourcetrước và chuyển nó dưới dạng -s <size>tham số pv.
-f -là dư thừa. tarĐầu ra mặc định cho cvà đầu vào cho xstdout và stdin.
Kiểm tra mã nguồn cho Progress_bar trong kho git bên dưới
https://github.com/Kiran-Bose/sup tối cao
Ngoài ra, hãy thử gói bash script tùy chỉnh tối cao
Tải xuống tệp deb và cài đặt trong bản phân phối dựa trên debian hoặc tải xuống các tệp nguồn, sửa đổi và sử dụng cho các bản phát hành khác
Tổng quan về chức năng
(1) Mở ứng dụng ---- Firefox ---- Máy tính ---- Cài đặt
(2) Quản lý tập tin ---- Tìm kiếm ---- Điều hướng ---- Truy cập nhanh
|----Select File(s)
|----Inverse Selection
|----Make directory
|----Make file
|----Open
|----Copy
|----Move
|----Delete
|----Rename
|----Send to Device
|----Properties
(3) Quản lý điện thoại ---- Di chuyển / Sao chép từ điện thoại ---- Di chuyển / Sao chép vào điện thoại ---- Đồng bộ hóa thư mục
(4) Quản lý USB ---- Di chuyển / Sao chép từ USB ---- Di chuyển / Sao chép sang USB
pv biết làm thế nào để xem các mô tả tập tin được cung cấp một pid, cho dù đó là cp hoặc cái gì khác
Từ tài liệu:
(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
Thí dụ:
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] [ <=> ]
pvkhông xử lý các quyền giống nhưcp... (dựa trên một thử nghiệm nhanh mà tôi đã thử:pvkhông sao chép bit thực thi ..rsyncđã làm.