GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara menghapus X byte dari akhir file besar tanpa membaca seluruh file?

gunakan fungsi truncate

http://linux.die.net/man/2/truncate

int truncate(const char *path, off_t length);
int ftruncate(int fd, off_t length); 

truncate mengambil nama file
ftruncate mengambil deskriptor file terbuka

keduanya mengatur panjang file menjadi length jadi itu memotong atau memanjang (dalam kasus terakhir, sisa file akan diisi dengan NULL/ZERO)

[sunting]
truncate (perintah shell linux) juga akan berfungsi

**SYNTAX**

truncate -s integer <filename>  
**OPTIONS**

-s number specify the new file length. If the new length is smaller than the current filelength data is lost. If the new length is greater the file is padded with 0. You can specify a magnitude character to ease large numbers:
b or B size is bytes.
k size is 1000 bytes.
K size is 1024 bytes.
m size is 10^6 bytes.
M size is 1024^2 bytes.
g size is 10^9 bytes.
G size is 1024^3 bytes.


**EXAMPLES**

To shrink a file to 10 bytes:

truncate -s 10 /tmp/foo

To enlarge or shrink a file to 345 Megabytes:

truncate -s 345M /tmp/foo

[/edit]


Meskipun ada banyak referensi untuk truncate berfungsi di utas ini, tidak ada yang benar-benar menjawab pertanyaan OP tentang mengurangi file dengan jumlah tetap dari lingkungan skrip. Jawaban Kevin menggunakan truncate untuk mengubah ukuran file target ke jumlah yang tetap, tetapi tentu saja kebenaran solusi ini mengharuskan pengguna untuk mengetahui terlebih dahulu ukuran file target dikurangi data asing di akhir. Jadi, kami memiliki:

   -s, --size=SIZE
          set or adjust the file size by SIZE bytes

Truncate sebenarnya mendukung penghapusan data dari akhir file target secara langsung dengan memberi awalan SIZE dengan - karakter.

Misalnya, untuk mengubah ukuran file sebesar 314 byte, Anda dapat melakukan:

truncate --size=-314 target_file.bin


Menggunakan "truncate" adalah cara terbaik, saya hanya memposting beberapa contoh:

  1. Saya memiliki file "PNav-h.db", yang memiliki 50176 byte.

    -rw-r--r--  1 user user 50176 Mar  8 23:43 PNav-h.db
     $truncate -s 1000 PNav-h.db
    

    itu mengatur ukuran file menjadi 1000 bypte

     -rw-r--r--  1 user user  1000 Mar  9 00:02 PNav-h.db
    
  2. Untuk kasus Anda, gunakan $truncate --size=xxx xxfilename , menggunakan -<size number> untuk mengurangi ukuran file

    $truncate --size=-300 PNav-h.db
    -rw-r--r--  1 user user   700 Mar  9 00:07 PNav-h.db
    

    ukuran file akhir =1000-300=700

  3. menggunakan +<size number> untuk meningkatkan ukuran file

    $truncate --size=+500 PNav-h.db
    -rw-r--r--  1 user user  1200 Mar  9 00:09 PNav-h.db
    

    ukuran file akhir =700 + 500 =1200

  4. jika tidak ada - atau + , ini untuk mengatur ukuran file.

    $truncate --size=60000 PNav-h.db
    -rw-r--r--  1 user user 60000 Mar  9 00:12 PNav-h.db 
    

    ukuran file akhir disetel ke 60000


Linux
  1. Bash Script Untuk Menghapus File Terlama Dari Folder A?

  2. Bagaimana Cara Menghapus Bom Dari File Utf-8?

  3. Cara Meningkatkan Batas Ukuran Unduhan File di Apache

  1. Cara melihat ukuran/detail file dari perintah ls di Unix

  2. Bagaimana cara mengekstrak satu potongan byte dari dalam file?

  3. Bagaimana cara menghapus baris baru dari file teks?

  1. Bagaimana cara menghapus garis yang muncul pada file B dari file A lainnya?

  2. Bagaimana cara mengekstrak teks dari file besar, mulai dari kemunculan pertama string?

  3. Bagaimana cara menghapus file tanpa menggunakan rm?