web-dev-qa-db-ja.com

大きなファイルを切り捨てるUnixシェルスクリプト

私は、たとえば3GBのスペースに達したときにアプリケーションによって継続的に書き込まれている/開かれているファイルを切り捨て/空にするUnixスクリプトを作成しようとしています。私は以下のコマンドでそれができることを知っています:

cp /dev/null [filename]

しかし、私はこれを実稼働環境でcronジョブとして自動的に実行します。ここに投稿して、これと似たようなことをしているときに問題に直面したかどうかを確認します。

80
peedee

別の答えを追加するために、

: > filename

:はbashのノーオペレーションなので、これは本質的に書き込み用にファイルを開き(もちろんファイルを切り捨てます)、その後すぐに閉じます。

編集:シェルターがコメントしたように、実際にリダイレクトを行うためのコマンドは必要ありません:

$ echo foo > foo.txt
$ cat foo.txt
foo
$ > foo.txt
$ cat foo.txt
$

単純なリダイレクトだけでファイルがクリアされます。

108
chepner

私はdebianで次のコマンドを使用しました

truncate -s 0 filename
62
Ricardo Marimon

それは理にかなっているようです。もちろん、Unixではこれを約50の異なる方法で実行できます。例えば、

echo -n "" >filename
cat /dev/null >filename
11
Don Branson

trunc filename

uNIXのAIXフレーバーで動作します

2
San