6

ディレクトリを開き、作成したすべてのログをループしてすべての行を削除するが、たとえば最後の 500 行を保持する cron ジョブを作成しようとしています。

私はその線に沿って何かを考えていました

tail -n 500 filename > filename

これは機能しますか?

また、bash でディレクトリをループする方法もわかりません。

4

5 に答える 5

5

logrotateの使用について考えてみてください。
それはあなたが望むことはしません (最後の 500 行を除くすべての行を削除します) が、特定のサイズよりも大きいログファイルを処理できます (通常、古いものを圧縮し、ある時点でそれらを削除することによって)。広く利用できるようにする必要があります。

于 2010-05-21T09:17:47.147 に答える
3

私の意見では、変数を使用するのが最も簡単で最速の方法です。

LASTDATA=$(tail -n 500 filename)
echo "${LASTDATA}" > filename
于 2014-09-21T10:45:59.070 に答える
1
DIR=/path/to/my/dir # log directory
TMP=/tmp/tmp.log # temporary file
for f in `find ${DIR} -type f -depth 1 -name \*.log` ; do
  tail -n 500 $f > /tmp/tmp.log
  mv /tmp/tmp.log $f
done
于 2010-05-21T09:16:01.470 に答える
0

bash では、ディレクトリ内のファイルをループします。たとえば、次のようになります。

cd target/directory

for filename in *log; do
    echo "Cutting file $filename"
    tail -n 500 $filename > $filename.cut
    mv $filename.cut $filename
done
于 2010-05-21T09:15:24.047 に答える