
私はファイルからすべての項目を削除する3つの方法を知っています。
彼ら
>filename
touch filename
1filename < /dev/null
>filename
3つのうち、最も少ない数のキーストロークが必要なため、最も濫用されます。
しかし、大容量ログファイルと小さなファイルについて、これら3つの方法のうちどれが最も効率的か(より効率的な方法がある場合)を知りたいです。
さらに、これらの3つのコードはどのようにコンテンツを操作して削除しますか?
1編集する:で議論したようにこの回答、これは実際に確かにファイルを削除してください!
答え1
実際、2番目のフォームはtouch filename
ファイルから何も削除しません。ファイルが存在しない場合は、空のファイルを作成するか、既存のファイルの最後の変更日を更新します。
3番目はfilenameを入力としてfilename < /dev/null
実行しようとします。/dev/null
cp /dev/null filename
働く
効率の面で最も効果的なものは次のとおりですtruncate -s 0 filename
(参照ここ)。
そうでなければ、両方ともcp /dev/null filename
大丈夫> filename
です。両方を開くと、切り捨て設定を使用してファイルを開いて閉じます。 cp
も点灯しているので/dev/null
少し遅くなります。
一方、truncateコマンドを実行するには、システムで実行可能ファイルを開いてロードしてから実行する必要があるため、スクリプトで実行するよりも遅くなる可能性がありますtruncate
。> filename
答え2
他のオプションは次のとおりです。
echo -n > filename
マニュアルページからecho
:
-n Do not print the trailing newline character.
答え3
sh、csh、bashなどで使用できる組み込みコマンド ":"があります。これは、>
ファイルを切り捨てるためにリダイレクト出力演算子で簡単に使用できます。
#!/usr/bin/env bash
:> filename
私が好きなのは、「echo」などの外部コマンドを必要としないことです。
ファイルを削除/再生するのではなく、ファイルを切り取ることの最大の利点の1つは、ファイルと機能するアプリケーション(たとえば、誰かが作成したファイルやtail -f filename
監視ソフトウェアなど)を実行するときにファイルを再度開く必要がないことです。引き続きファイル記述子を使用し、すべての新しいデータを取得できます。