tiến trình thông tin qua pv để sao chép thư mục


13

Tôi cần sao chép một thư mục rất lớn (nói bằng terabyte ở đây) và muốn theo dõi tiến trình.

Tôi thấy đó pvlà một tiện ích tốt, nhưng làm thế nào tôi có thể sử dụng nó để sao chép các thư mục theo cách đệ quy? ( pv src > dstkhông hoạt động vì chúng là thư mục)

PS: Chạy trên OS X Mountain Lion, pvđã được cài đặt từ Mac Cổng

Câu trả lời:


21

Sử dụng rsync --progress [SRC] [DST]

Hãy kiểm tra man rsynctrang vì nó có rất nhiều tùy chọn rất hữu ích. -ađể lưu trữ là một khởi đầu tốt, nhưng nó phụ thuộc vào yêu cầu chính xác của bạn.

Sao chép qua một đường ống sẽ làm chậm quá trình sao chép một cách không cần thiết, đặc biệt nếu đó là các tệp dựa trên.


Tại sao sao chép qua một đường ống làm chậm quá trình? Bộ đệm được cung cấp bởi các đường ống và đa tác vụ liên quan đến các đường ống có khả năng giúp đỡ các vấn đề tôi sẽ nói. (và rsync là đa quy trình và sử dụng các đường ống trong IIRC). Quy trình sao chép không dựa trên tệp là gì?
Stéphane Chazelas

Bash là thuận tiện, nhưng không nhanh chóng. Đặc biệt là khi đường ống này đến lệnh khác.
jippie

@StephaneChazelas: Bởi vì bộ đệm của ống chỉ có 8KB. Một chương trình như rsync có thể muốn sử dụng bộ đệm nội bộ lớn hơn nhiều.
Zan Lynx

10

Bạn có thể sử dụng tarhay paxhay cpio:

mkdir -p dst &&
  (cd src && tar cf - .) | pv -trb | (cd dst && tar xpf -)

1
Ngoài ra, bạn có thể thêm một vđến tarlệnh để xem tên tập tin.
peterph

Vì vậy, điều này sẽ nén thư mục nguồn trước khi thực hiện sao chép, phải không? Thư mục của tôi có kích thước 5 TB, vì vậy tôi không chắc đây có phải là cách tốt nhất để làm không? Tôi thực sự thích sử dụng pv vì nó cho thấy một tình trạng tiến triển thực sự tốt, xin lời khuyên nào?
Tak

@Tak, không, nó không nén bất cứ thứ gì vì không có nén. tar cf -xuất ra một luồng chứa các tệp và siêu dữ liệu của chúng, được đưa qua một đường ống đến pv, nó cung cấp luồng này cho đến luồng khác tartrong khi in chỉ thị tiến trình và tartrích xuất dữ liệu khác trong luồng đó. Tất cả ba lệnh chạy đồng thời và xử lý dữ liệu khi nó xuất hiện, không có gì được lưu trữ trên đĩa, không có gì được lưu trữ trong bộ nhớ ngoài bộ đệm ống và bộ đệm bên trong lệnh chỉ lên tới vài kilobyte.
Stéphane Chazelas

@ StéphaneChazelas Cảm ơn bạn đã bình luận. Tôi đã thử nó và nó hoạt động, điều duy nhất là thanh tiến trình không hiển thị phần trăm dự kiến ​​mà nó tiếp tục đi từ trái sang phải. Bất cứ ý tưởng tại sao? Tôi đã sử dụng pv với tham số này -petra thường hiển thị thanh tiến trình trong đó thanh tiếp tục được lấp đầy cho đến khi hoàn thành. Tôi cũng nêu lên câu trả lời của bạn.
Tak

@Tak, pvkhông có cách nào để biết có bao nhiêu dữ liệu để chuyển. Nếu bạn có ước tính về số tiền đó, bạn có thể chuyển nó cho nó với -stùy chọn (GNU du -sb srcsẽ cung cấp cho bạn một xấp xỉ tốt nếu các tệp đủ lớn)
Stéphane Chazelas

2

Tar.

tar -cf - /var/log/ | pv | tar -C . -x

Thí dụ:

# tar -cf - /var/log/ | pv | tar -C . -x
tar: Removing leading `/' from member names
58MB 0:00:05 [ 2.2MB/s] [                   <=> 

1

Dưới đây là một số lệnh để sao chép thư mục với thông tin tiến trình.


Nếu có nhiều tệp nhỏ:

cp -av sourcedir targetdir | pv -l -s filecount > logfile

Điều này sẽ báo cáo tiến trình dựa trên số lượng tệp được sao chép.

Bạn có thể chuyển hướng đến /dev/nullnếu bạn không cần logfile.

Sử dụng lệnh sau để nhận filecount:

find sourcedir | wc -l

Nếu có một vài tệp lớn:

tar c sourcedir | pv -s size | tar x -C targetdir

Điều này sẽ báo cáo tiến trình dựa trên các byte được sao chép.

targetdir phải tồn tại

Sử dụng lệnh sau để nhận size:

du -sh sourcedir

Nếu bạn muốn sử dụng rsync:

rsync -ai sourcedir/ targetdir/ | pv -l -s filecount > logfile

Nhận filecountnhư hình trên.

Nếu bạn đang sao chép trên cùng một hệ thống thì rsync -athực tế giống như vậy cp -a. Ưu điểm của rsync là khi bạn sao chép qua mạng hoặc nếu bạn đang cập nhật (hoặc so sánh) một bản sao trước đó.

Xem tại đây để biết thêm chi tiết:


0

Bạn có thể thực hiện du -b /directory/trên cả nguồn và đích trong khi đang thực hiện lệnh sao chép bình thường và so sánh hai nguồn. Điều này cũng hiệu quả và không làm chậm quá trình sao chép bằng cách đẩy nó qua đường ống.


-1
find source-dir -print0 | xargs -0 -I % pv % > dest-dir/%

3
Vui lòng giải thích về solutipon, bạn sẽ muốn OP có thể checo nó (và tìm hiểu)
vonbrand
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.