Saya punya beberapa file besar yang ingin saya kompres. Saya bisa melakukan ini dengan misalnya
tar cvfj big-files.tar.bz2 folder-with-big-files
Masalahnya adalah saya tidak bisa melihat kemajuan, jadi saya tidak tahu berapa lama waktu yang dibutuhkan atau hal-hal seperti itu. Menggunakan v
I setidaknya dapat melihat kapan setiap file selesai, tetapi ketika file sedikit dan besar ini bukan yang paling membantu.
Apakah ada cara agar tar bisa menunjukkan kemajuan yang lebih rinci? Seperti persentase yang dilakukan atau bilah kemajuan atau perkiraan waktu tersisa atau sesuatu. Baik untuk setiap file tunggal atau semuanya atau keduanya.
pv $FILE.tgz | tar xzf - -C $DEST_DIR
tar cf - /folder-with-big-files -P | pv -s $[$(du -sk /folder-with-big-files | awk '{print $1}') * 1024] | gzip > big-files.tar.gz
Tanpa perubahan ini, saya dapat-bash: syntax error near unexpected token ')'
Anda dapat menggunakan pv untuk mencapai ini. Untuk melaporkan kemajuan dengan benar,
pv
perlu tahu berapa byte yang Anda lemparkan. Jadi, langkah pertama adalah menghitung ukuran (dalam kbyte). Anda juga dapat menghapus bilah kemajuan sepenuhnya dan biarkanpv
Anda tahu berapa banyak byte yang telah dilihatnya; itu akan melaporkan 'melakukan yang banyak dan secepat itu'.Lalu:
sumber
pv
tampaknya tidak datang dengan Mac OS X, tetapi akan mencoba ini setelah saya memiliki komputer dengan MacPort di atasnya. Bisakah Anda menjelaskan apa yang Anda lakukan di sana? Tidak yakin persis apa yang dilakukan baris pertama.SIZE=$(($SIZE * 1000 / 1024))
- Saya tidak tahu apakah ini kekhasan pada platform khusus saya, jadi saya tidak menambahkannya ke jawaban:du
mengembalikan ukuran di mana 1 kb = 1024 byte, sementarapv
tampaknya mengharapkan 1 kb = 1000 byte. (Saya di Ubuntu 10,04)du
untuk menggunakan blocksize pilihan Anda, mis.du -s --block-size=1000
, atau hanya bekerja dengan byte biasa, misalkan dropk
daridu
danpv
panggilan. Namun demikian, saya akan mengharapkan keduanya untuk digunakan1024
kecuali jika diberitahu sebaliknya, mis.--si
Menyalakandu
, misalnya.du -sb
danpv -s
tanpa pengubah). yang seharusnya mengakhiri semua kebingungan.progress bar lebih baik ..
sumber
Lihat
--checkpoint
dan--checkpoint-action
opsi di halaman info tar (seperti untuk distribusi saya, deskripsi untuk opsi ini tidak terdapat di halaman manual → RTFI).Lihat https://www.gnu.org/software/tar/manual/html_section/tar_26.html
Dengan ini (dan mungkin fungsionalitas untuk menulis perintah pos pemeriksaan Anda sendiri), Anda dapat menghitung persentase ...
sumber
tar
spesifik GNU .Terinspirasi oleh jawaban pembantu
Cara lain adalah menggunakan
tar
opsi aslihasilnya seperti
contoh lengkap di sini
sumber
Hanya menggunakan tar
tar
memiliki opsi (sejak v1.12) untuk mencetak informasi status pada sinyal menggunakan--totals=$SIGNO
, misalnya:The
Total bytes written: [...]
informasi akan dicetak pada setiap sinyal USR1, misalnya:Sumber:
sumber
Hanya memperhatikan komentar tentang MacOS, dan sementara saya pikir solusi dari @akira (dan pv) jauh lebih rapi saya pikir saya akan mengejar firasat dan playaround cepat di kotak MacOS saya dengan tar dan mengirimkannya sinyal SIGINFO. Lucunya, itu berhasil :) jika Anda menggunakan sistem mirip-BSD, ini seharusnya bekerja, tetapi pada kotak Linux, Anda mungkin perlu mengirim SIGUSR1, dan / atau
tar
mungkin tidak bekerja dengan cara yang sama.Sisi buruknya adalah ia hanya akan memberi Anda output (on stdout) yang menunjukkan seberapa jauh file saat ini karena saya kira tidak tahu seberapa besar aliran data yang didapat.
Jadi ya, pendekatan alternatif adalah menjalankan tar dan secara berkala mengirimkannya SIGINFO kapan pun Anda ingin tahu seberapa jauh jaraknya. Bagaimana cara melakukannya?
Ad-hoc, pendekatan manual
Jika Anda ingin dapat memeriksa status berdasarkan ad-hoc, Anda dapat menekan
control-T
(seperti yang disebutkan Brian Swift) di jendela yang relevan yang akan mengirimkan sinyal SIGINFO. Satu masalah dengan itu adalah itu akan mengirimkannya ke seluruh rantai Anda, saya percaya, jadi jika Anda melakukannya:Anda juga akan melihat bzip2 melaporkan statusnya bersama dengan tar:
Ini berfungsi baik jika Anda hanya ingin memeriksa apakah
tar
Anda sedang berjalan macet, atau hanya lambat. Anda mungkin tidak perlu terlalu khawatir tentang memformat masalah dalam kasus ini, karena ini hanya pemeriksaan cepat ..Jenis pendekatan otomatis
Jika Anda tahu itu akan memakan waktu, tetapi ingin sesuatu seperti indikator kemajuan, alternatifnya adalah menjalankan proses tar Anda dan di terminal lain berhasil PID dan kemudian membuangnya ke dalam skrip yang baru saja mengirim sinyal berulang kali . Misalnya, jika Anda memiliki skrip berikut (dan aktifkan seperti kata
script.sh PID-to-signal interval-to-signal-at
):Jika Anda memintanya seperti ini, karena Anda hanya menargetkan,
tar
Anda akan mendapatkan hasil lebih seperti iniyang saya akui, agak cantik.
Last but not least - skrip saya agak berkarat, jadi jika ada yang ingin masuk dan membersihkan / memperbaiki / meningkatkan kode, pergi untuk hidup Anda :)
sumber
tar
di baris perintah, mengetikcontrol-T
akan mengirimkannya SIGINFO. Jika ini dalam naskah, itu akan dilakukan dengankill -INFO pid
control-T
, saya jelas sudah terbiasa dengan spamming terlalu banyak jendela konsol untuk kebaikan saya sendiri ..kill -l
Terinspirasi oleh jawaban Noah Spurrier
Sumber
sumber
Jika Anda tahu nomor file alih-alih ukuran total dari semuanya:
alternatif (kurang akurat tetapi cocok) adalah dengan menggunakan opsi -l dan mengirim pipa unix nama file, bukan konten data.
Mari kita memiliki 12345 file ke mydir , perintahnya adalah:
Anda dapat mengetahui nilai tersebut di muka (karena kasus penggunaan Anda) atau menggunakan beberapa perintah seperti find + wc untuk menemukannya:
sumber
tar cfvz ~/mytarfile.tgz . | pv -s $(find . | wc -l) -l > /dev/null
. Apakah itu berhasil untuk Anda?Metode berdasarkan tqdm :
sumber
Pada macOS , pertama pastikan bahwa Anda memiliki semua perintah yang tersedia, dan instal yang hilang (misalnya
pv
) menggunakan minuman .Jika Anda hanya ingin
tar
tanpa kompresi , lanjutkan dengan:Jika Anda ingin mengompres , lanjutkan dengan:
sumber
Berikut adalah beberapa nomor cadangan prometheus (data metrik) pada Debian / buster AMD64:
Membatalkan pekerjaan ini karena tidak ada ruang disk yang cukup.
Bereksperimen dengan
zstd
sebagai kompresor untuktar
memantau kemajuan menggunakanpv
:sumber