ファイルの内容を消去する最も効率的な方法

ファイルの内容を消去する最も効率的な方法

私はファイルからすべての項目を削除する3つの方法を知っています。

彼ら

  • >filename
  • touch filename1
  • filename < /dev/null

>filename3つのうち、最も少ない数のキーストロークが必要なため、最も濫用されます。

しかし、大容量ログファイルと小さなファイルについて、これら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監視ソフトウェアなど)を実行するときにファイルを再度開く必要がないことです。引き続きファイル記述子を使用し、すべての新しいデータを取得できます。

関連情報