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ù cp
khô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, pv
về 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. cp
về cơ bản không có gì lạ hơn
cat source > destination
(nơi cat
chỉ cần đọc một tập tin và in nó ra thiết bị xuất chuẩn). 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 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/fd
và /proc/PID of cp/fdinfo
tì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
.
-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í 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, rsync
có một --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ư 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)
-r
cờ để 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"
--progress
khiế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 gcp
và gcp
giố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 , gcp
có 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ư --preserve
vậ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 gcp
hoặ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 gcp
từ 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ừ 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 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
trướ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
gcp
là 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@host
và đ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, -v
tùy chọn vào 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
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
để 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 trình của nó theo định kỳ (mỗi giây).
Có một công cụ được gọi progress
trong 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 pv
có thể xử lý các cp
tác vụ cục bộ , sử dụng dd
với pv
có 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.mkv
lố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 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
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 -q
thậm chí còn gọn gàng hơn
cp
có 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 DIR
trê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-r
phầ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 pv
hoặc rsync
tố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 mc
tí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 source
là 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 source
trướ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 c
và đầu vào cho x
stdout 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] [ <=> ]
pv
khô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ử:pv
không sao chép bit thực thi ..rsync
đã làm.