informasi kemajuan melalui pv untuk salinan direktori

13

Saya perlu menyalin direktori yang sangat besar (berbicara dalam terabyte di sini) dan ingin memantau perkembangannya.

Saya menemukan itu pvadalah utilitas yang bagus, tetapi bagaimana saya bisa menggunakannya untuk menyalin direktori secara rekursif? ( pv src > dsttidak berfungsi karena mereka adalah direktori)

PS: Berjalan di OS X Mountain Lion, pvdiinstal dari Mac Ports

FP
sumber

Jawaban:

21

Menggunakan rsync --progress [SRC] [DST]

Periksa man rsynchalaman karena memiliki banyak opsi yang sangat berguna. -auntuk arsip adalah awal yang baik, tetapi itu tergantung pada persyaratan Anda.

Menyalin melalui pipa akan memperlambat proses penyalinan, terutama jika itu berbasis file.

jippie
sumber
Mengapa menyalin melalui pipa memperlambat proses? Buffer yang disediakan oleh pipa dan multi-tasking yang terkait dengan pipa cenderung membantu hal-hal yang akan saya katakan. (dan rsync adalah multi-proses dan menggunakan pipa secara internal IIRC). Apa itu proses penyalinan yang tidak berbasis file?
Stéphane Chazelas
Bash nyaman, tetapi tidak cepat. Terutama ketika memipakan satu perintah ke yang lain.
jippie
@StephaneChazelas: Karena penyangga pipa hanya 8KB. Program seperti rsync mungkin ingin menggunakan buffer internal yang jauh lebih besar.
Zan Lynx
10

Anda bisa menggunakan taratau paxatau cpio:

mkdir -p dst &&
  (cd src && tar cf - .) | pv -trb | (cd dst && tar xpf -)
Stéphane Chazelas
sumber
1
Selain itu, Anda dapat menambahkan vke tarperintah untuk melihat nama file.
peterph
Jadi ini akan zip folder sumber sebelum melakukan copy, kan? Folder saya berukuran 5 TB, jadi saya tidak yakin apakah ini cara terbaik untuk melakukannya? Saya sangat suka menggunakan pv karena menunjukkan status kemajuan yang sangat bagus, ada saran?
Tak
@Tak, tidak, itu tidak zip apa-apa karena tidak ada kompresi. tar cf -menampilkan aliran yang berisi file dan metadata-nya, yang diumpankan melalui pipa ke pv yang mengumpankannya ke yang lain tarsaat mencetak indikasi kemajuan, dan yang lainnya tarmengekstrak data dalam aliran itu. Ketiga perintah berjalan secara bersamaan dan memproses data ketika datang, tidak ada yang disimpan di disk, tidak ada yang tersimpan di memori selain buffer pipa dan perintah buffer internal yang hanya berjumlah beberapa kilobyte.
Stéphane Chazelas
@ StéphaneChazelas Terima kasih atas komentarnya. Saya sudah mencobanya dan berhasil, satu-satunya hal adalah progress bar tidak menunjukkan persentase yang diharapkan dari kiri ke kanan. Ada yang tahu kenapa? Saya menggunakan pv dengan parameter ini -petra yang biasanya menunjukkan progress bar di mana bar terus diisi sampai selesai. Saya telah mengangkat jawaban Anda juga.
Tak
@ Tak, pvtidak memiliki cara untuk mengetahui berapa banyak data yang ada untuk ditransfer. Jika Anda memiliki perkiraan jumlah itu, Anda bisa meneruskannya dengan -sopsi (GNU du -sb srcakan memberi Anda perkiraan yang baik jika file-file tersebut cukup besar)
Stéphane Chazelas
2

Ter.

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

Contoh:

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

Berikut adalah beberapa perintah untuk menyalin direktori dengan informasi kemajuan.


Jika ada banyak file kecil:

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

Ini akan melaporkan kemajuan berdasarkan jumlah file yang disalin.

Anda dapat mengalihkan ke /dev/nulljika Anda tidak perlu logfile.

Gunakan perintah berikut untuk mendapatkan filecount:

find sourcedir | wc -l

Jika ada beberapa file besar:

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

Ini akan melaporkan kemajuan berdasarkan byte yang disalin.

targetdir harus ada.

Gunakan perintah berikut untuk mendapatkan size:

du -sh sourcedir

Jika Anda ingin menggunakan rsync:

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

Dapatkan filecountseperti yang ditunjukkan di atas.

Jika Anda menyalin pada sistem yang sama maka rsync -apraktis sama dengan cp -a. Keuntungan dari rsync adalah ketika Anda menyalin melalui jaringan atau jika Anda memperbarui (atau membandingkan) salinan sebelumnya.

Lihat di sini untuk detail lebih lanjut:

lesmana
sumber
0

Anda bisa melakukan du -b /directory/pada sumber dan tujuan saat perintah penyalinan normal sedang berlangsung, dan bandingkan keduanya. Ini sama efektifnya dan tidak memperlambat proses penyalinan dengan mendorongnya melalui pipa.

Rasul
sumber
-1
find source-dir -print0 | xargs -0 -I % pv % > dest-dir/%
Christopher Hilla
sumber
3
Tolong jelaskan solutipon tur, Anda ingin OP dapat membuat checo (dan belajar)
vonbrand