ディレクトリ内のすべてのログファイルを消去する

ディレクトリ内のすべてのログファイルを消去する

最近触れたこのページファイルを空にする方法を示します。特定のサブフォルダ内のすべてのファイルに対してこれを行うにはどうすればよいですか?

たとえば、> file.log次のようにファイルを消去するには?

デフォルトでは、仮想マシンインスタンスイメージを作成し、テンプレートを使用するときに残りのデータなしで再起動するように既存のログファイルを消去したいと思います。

答え1

そして

for i in /var/log/*; do
    > "$i"
done

ディレクトリに関するエラーメッセージを防ぐには、テストを含めてください。

for i in /var/log/*; do
    test -f "$i" && > "$i"
done

答え2

単一コマンドの別のオプションは次のとおりです。truncate:

truncate -s /var/log/*

ただし、上記のコードは/var/logのすべてのサブディレクトリに対してエラーを発生させます。

切り捨て:書き込み用に '/var/log/subdir'を開くことができません。ディレクトリです。

...stderrを削除して無音に設定できます。

truncate -s /var/log/* 2>/dev/null

ファイルやディレクトリがない場合は、現在のnullglobシェルオプションに注意する必要があります。デフォルトではオフです。

$ shopt nullglob
nullglob        off

...これにより、*コンテンツは拡張されていないままになるため、truncateというファイルが生成されます*。次の 2 つの方法でこれを回避できます。

  1. shopt -s nullglobnullglob設定:実行する前にtruncate。その後、(stderrを削除しないと)エラーが表示されます。

    切り捨て:ファイルオペランドがありません

  2. truncate欠落しているファイルを生成しないように指示します。truncate --no-create -s 0 /var/log/*

関連情報