ディレクトリを開き、作成したすべてのログをループしてすべての行を削除するが、たとえば最後の 500 行を保持する cron ジョブを作成しようとしています。
私はその線に沿って何かを考えていました
tail -n 500 filename > filename
これは機能しますか?
また、bash でディレクトリをループする方法もわかりません。
logrotateの使用について考えてみてください。
それはあなたが望むことはしません (最後の 500 行を除くすべての行を削除します) が、特定のサイズよりも大きいログファイルを処理できます (通常、古いものを圧縮し、ある時点でそれらを削除することによって)。広く利用できるようにする必要があります。
私の意見では、変数を使用するのが最も簡単で最速の方法です。
LASTDATA=$(tail -n 500 filename)
echo "${LASTDATA}" > filename
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
bash では、ディレクトリ内のファイルをループします。たとえば、次のようになります。
cd target/directory
for filename in *log; do
echo "Cutting file $filename"
tail -n 500 $filename > $filename.cut
mv $filename.cut $filename
done