Bagaimana cara melanjutkan perintah tar yang terbunuh


11

Saya sedang melakukan: tar -cvfdan saya harus membunuhnya ctrl-C. Saya tahu saya harus melakukan Ctrl-Zdan kemudian membawa kembali tugas ke latar depan ... tapi bukan ceritanya.

Bisakah saya melanjutkan dari titik saya menghentikan tugas?


Apakah ada file tar yang tidak lengkap di lokasi tujuan?
Karthik T

Ya ada tar yang tidak lengkap.
mthpvg

Jawaban:


11

Metode ini akan membuat kembali arsip tar Anda, dan menambahkan bagian yang sudah jadi ke file yang ada. Ini dapat berguna jika membuat cadangan melalui koneksi jaringan. Anda kemungkinan akan menghasilkan arsip yang rusak jika salah satu data di INFILES Anda telah berubah. Pastikan untuk menguji arsip Anda setelah selesai.

Ubah INFILES dan OUTFILE ke nama yang benar pada baris berikut.

INFILES="my folder"; OUTFILE="archive.tgz"; SIZE="$(wc -c < $OUTFILE)"; tar -cz --to-stdout "$INFILES" | tail -c +$(($SIZE+1)) >> "$OUTFILE"

Penjelasan:

SIZE="$(wc -c < $OUTFILE)" # Dapatkan ukuran arsip saat ini.

tar -cz --to-stdout "$INFILES" |# Mulailah membuat arsip dan mengirim output ke tailperintah.

tail -c +$(($SIZE+1)) >> # Abaikan data sebelum $ SIZE + 1, dan lanjutkan sisa arsip $ OUTFILE.


2
Saya menganggap ini lebih cepat daripada hanya me-restart proses tar karena sebenarnya tidak menulis apa pun ke disk?
Tyler

2

Solusi terbaik adalah dengan menghapus file tar dan memulai kembali proses yang diawali dengan nohupdan ditambahkan &. Atau, Anda bisa menjalankan tar -tfvdan menggunakannya sebagai pengecualian untuk yang baru tar -cvf.


2
tar -cvfakan menimpa file yang ada. Apakah maksud Anda tar -rvf? Juga, file terakhir yang ditulis ke arsip kemungkinan tidak lengkap.
Gilles 'SO- berhenti menjadi jahat'

Jadi idenya adalah untuk membuat daftar file yang sudah ada di tarball, minus yang terakhir yang mungkin tidak lengkap. Dan kemudian jalankan tar -rvf?
mthpvg

2

Kamu tidak bisa; Anda hanya perlu memulai dari awal.


1

Apa yang saya lakukan dalam kasus ini, bahwa saya memiliki tararsip yang tidak lengkap , saya membuat daftar file dalam arsip:

tar tf archive.tar | sed -e '/\/$/d' -e x -e '/^$/d' >files-done

The sedperintah menghapus semua garis, yang memiliki garis miring: ini adalah direktori, bukan file, dan kami ingin membuang direktori lagi dan hanya melewatkan file-file di direktori tersebut, bahwa kita sudah di arsip tar pertama. Selanjutnya, kami membiarkan sedmenghapus nama file terakhir, karena itu kemungkinan besar telah dibuang hanya sebagian, jadi kami akan mengarsipkannya lagi.

Kemudian hanya meneruskan files-donedaftar melalui opsi -X ke tarperintah baru :

tar cfvX archive2.tar files-done SOURCEDIR

Pastikan untuk menggunakan nama file keluaran yang berbeda pada perintah tar baru, atau Anda akan menimpa arsip parsial Anda. Jangan mencoba menambahkan langsung ke arsip tar yang rusak.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.