GNU/Linux >> Belajar Linux >  >> Linux

Batalkan pengarsipan file sambil mengurangi ukuran arsip?

Ini solusi lain. Itu tidak akan membiarkan Anda mengekstrak file satu per satu dari arsip dan mengurangi ukurannya, tetapi itu memungkinkan Anda mengekstrak semua file yang mengurangi ukuran arsip saat Anda pergi:

#!/bin/sh

# $1, the first paramter, is the .tar.gz file to unarchive

(
    size=$(wc -c $1)
    offset=0
    bs=4096
    while [[ $size > $offset ]]; do
        dd if=$1 bs=$bs count=1 skip=$offset status=none
        fallocate -p -o $offset -l $bs $1
        offset=$(( $offset + $bs ))
    done
) | tar xz

Simpan ini ke dalam file seperti mis. untar_and_destroy.sh dan jalankan sebagai:

untar_and_destroy.sh whatever.tar.gz

Apa yang dilakukan adalah memberikan bagian dari .tar.gz file ke tar, meminta Linux untuk membatalkan alokasi bagian file itu, dan kemudian mengulanginya untuk bagian berikutnya. Setelah selesai, ls -l akan mengatakan .tar.gz file memiliki ukuran yang sama seperti sebelumnya, tetapi du akan melaporkan ukurannya sebagai 0. Ini karena .tar.gz telah dibuat menjadi file jarang, dengan panjang yang sama seperti sebelumnya tetapi semua 0 yang tidak perlu disimpan ke disk.

Jangan gunakan ini dalam produksi, atau di mana saja di mana menghapus arsip itu akan berdampak buruk. Ini membuat arsip tidak dapat dibaca segera setelah dimulai, jadi jika terjadi kesalahan, mis. Anda kehabisan ruang hard disk saat mengekstraksi, Anda tidak akan mendapatkan kesempatan kedua untuk menjalankan ini.


Meskipun memperluas penyimpanan utama mungkin tidak praktis, mungkin Anda dapat mengekstrak konten file ke perangkat penyimpanan eksternal.

Alternatifnya, buat daftar file di arsip, lalu tulis skrip yang mengekstrak beberapa di antaranya. Pindahkan file-file itu ke cloud, pilih batch lain untuk diekstraksi, busakan, bilas, ulangi.

Namun, setiap aplikasi pengarsipan yang saya tahu harus memiliki file arsip asli utuh saat membuat file arsip baru tanpa apa yang tidak Anda inginkan, jadi penyimpanan eksternal akan sangat, sangat berguna.


Saya tidak tahu alat apa pun yang dapat melakukan ini, dan menurut saya tidak ada format pengarsipan umum yang mendukung ini.

Salah satu solusi yang mungkin untuk masalah Anda adalah menyimpan arsip di mesin lain dan menyalurkannya ke mesin yang ingin Anda dekompresi. Misalnya, Anda dapat menjalankan perintah ini di mesin dengan arsip:

cat archive.tar.gz | ssh YOUR_SERVER tar xfz -

Arsip akan dialirkan ke tar proses yang berjalan di server, yang akan mendekompresinya tanpa memerlukan arsip untuk selalu ada di server.


Linux
  1. Cara Membagi Arsip 'tar' Besar menjadi Beberapa File dengan Ukuran Tertentu

  2. Buat Arsip Tar Dipecah Menjadi Blok Ukuran Maksimal?

  3. Perbedaan Perhitungan Ukuran Direktori?

  1. Perintah tar Linux

  2. Kesalahan tar:EOF tak terduga dalam arsip

  3. Cara mendapatkan ukuran file tar.gz dalam (MB) dengan python

  1. perhatikan ukuran file di linux

  2. ekstrak satu file dari file tgz besar

  3. Format arsip yang diindeks?