Saya mengetahui tiga metode untuk menghapus semua entri dari sebuah file.
Mereka adalah
>filename
touch filename
filename < /dev/null
Dari ketiganya saya menyalahgunakan >filename
sebanyak itu membutuhkan jumlah penekanan tombol paling sedikit.
Namun, saya ingin tahu mana yang paling efisien dari ketiganya (jika ada metode yang lebih efisien) sehubungan dengan file log besar dan file kecil.
Juga, bagaimana ketiga kode itu beroperasi dan menghapus konten?
Sunting :seperti yang dibahas dalam jawaban ini, ini sebenarnya tidak hapus filenya!
Jawaban yang Diterima:
Sebenarnya, bentuk kedua touch filename
tidak menghapus apa pun dari file – hanya membuat file kosong jika tidak ada, atau memperbarui tanggal modifikasi terakhir dari file yang ada.
Dan filename < /dev/null
ketiga mencoba menjalankan nama file dengan /dev/null
sebagai masukan.
cp /dev/null filename
bekerja.
Untuk efisien, yang paling efisien adalah truncate -s 0 filename
(lihat di sini).
Jika tidak, cp /dev/null filename
atau > filename
keduanya baik-baik saja. Keduanya membuka lalu menutup file, menggunakan pengaturan truncate-on-open. cp
juga membuka /dev/null
, sehingga membuatnya sedikit lebih lambat.
Sebaliknya, truncate
kemungkinan akan lebih lambat dari > filename
ketika dijalankan dari skrip karena menjalankan perintah truncate mengharuskan sistem untuk membuka file yang dapat dieksekusi, memuatnya, dan kemudian menjalankannya.