我正在寻找创建一个cron作业,打开一个目录循环遍历我创建的所有日志并删除所有行,但保留最后500行例如。
我正在考虑
的内容 tail -n 500 filename > filename
这会有用吗?
我也不确定如何在bash中遍历目录。
答案 0 :(得分:14)
如果某些服务当前打开了要截断的日志文件,那么在之前的答案中使用mv会中断这些服务。这可以通过使用猫来轻松克服:
tail -n 1000 myfile.log > myfile.tmp
cat myfile.tmp > myfile.log
答案 1 :(得分:5)
考虑使用logrotate 它不会做你想要的(删除所有行,但删除最后500行),但它可以处理大于特定大小的日志文件(通常通过压缩旧文件并在某些时候删除它们)。应该广泛使用。
答案 2 :(得分:3)
在我看来,最简单快捷的方法是使用变量:
LASTDATA=$(tail -n 500 filename)
echo "${LASTDATA}" > filename
答案 3 :(得分: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
答案 4 :(得分: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