Saya ingin mengecilkan ukuran file dengan kekerasan, yaitu, saya tidak peduli tentang sisanya, saya hanya ingin memotong file, katakan setengahnya, dan buang sisanya.
Hal pertama yang terlintas di benak saya adalah truncate Perl . Saya mengikuti contoh di halaman itu dan melakukan hal yang persis sama:
seq 9 > test.txt
ls -l test.txt
perl -we 'open( FILE, "< ./test.txt" ) && truncate( FILE, 8 ) && close(FILE);'
Tetapi file tersebut masih memiliki ukuran yang sama:
$ ls -lgG test.txt
-rw-rw---- 1 18 2013-08-08 09:49 test.txt
Bagaimana saya bisa membuat ini berfungsi?
membuka file untuk dibaca. Namun, untuk memotong file Anda perlu memodifikasinya, sehingga pegangan file read-only tidak akan berfungsi. Anda perlu menggunakan mode "ubah" (
"+>"
).Sebagai masalah sampingan, selalu mengherankan saya ketika orang membiarkan panggilan sistem gagal diam-diam dan kemudian bertanya apa yang salah. Bagian penting dari mendiagnosis masalah adalah melihat pesan kesalahan yang dihasilkan; bahkan jika Anda tidak memahaminya, itu membuat hidup lebih mudah bagi mereka yang Anda minta bantuan.
Berikut ini akan sedikit lebih membantu:
meskipun harus diakui bahwa hanya akan melaporkan "argumen tidak valid". Namun, itu adalah informasi yang berguna dan mungkin telah mengarahkan Anda pada kesimpulan bahwa mode buka salah (seperti yang terjadi pada saya).
sumber
Anda dapat menggunakan
tail
untuk memotong 100000 byte terakhir, contoh:-c menampilkan final 100000 bytes file, untuk lebih banyak opsi:
Untuk mengganti file asli dengan file yang baru saja Anda buat:
sumber
Jawaban di atas mengutip truncate bagus. dd juga akan melakukan pekerjaan:
sumber
ada cara yang sangat berbeda untuk melakukan ini, dengan bash, menggunakan program ed. skrip berikut akan mempertahankan hanya 5000 baris terakhir dari semua file yang duduk di direktori yang ditentukan. ini dapat dengan mudah dimodifikasi untuk mengulang beberapa direktori, mengubah jumlah baris, dll.
sumber