我有一个名为access.log的文件,它始终从服务器接收数据。所以我需要将access.log文件的数据复制到几个文件中而不影响任何文件中的数据。 例如:如果我执行脚本,需要将数据复制到另一个文件(文件名应该是access_1.log),并且应该截断access.log文件。如果我第二次执行相同的脚本,则应将数据复制到access_2.log文件,并截断access.log文件。因此,如果运行该文件10次,则需要创建10个文件。 我已经尝试过以下脚本但是我的代码中的计数值没有增加。因此,我们总是获得与access_1.log和数据相同的文件名。
count=1
cp access.log access_$count.log
>access.log
count=`expr $count + 1`
请帮帮我
答案 0 :(得分:1)
试试这个并告诉我它是否有效。
name='access'
if [[ -e $name.log ]] ; then
i=1
while [[ -e $name_$i.log ]] ; do
let i++
done
name=$name_$i
fi
cp -r /path/to/access.log "$name".log
cat /dev/null > /path/to/access.log
答案 1 :(得分:0)
FILE_LOCATION=/path/to/file/
FILE_DEST=/second/path/
for count in $(seq 1 1000) ;do
if [! -e ${FILE_DEST}access_${count}.log ];then
cp ${FILE_LOCATION}access.log ${FILE_DEST}access_${count}.log
exit 0
fi
done
享受
答案 2 :(得分:0)
将以下内容放入myprocess.conf
/var/log/access.log {
rotate 10
weekly
postrotate
/usr/bin/killall -HUP $myprocess
endscript
}
然后运行logrotate命令
logrotate --force $CONFIG_FILE
其中$CONFIG_FILE
是您创建的配置文件的路径。 $ myprocess是写入日志的守护进程的名称。它将每周轮换登录
有关您计算机上已有的配置,请参阅/etc/logrotate.d目录。
如果您仍然不相信并且出于某种原因想要使用脚本,那么请尝试使用此脚本。
last=`ls access_* | sort -n -k 1.8 -r| head -1 | sed -e 's/access_\([0-9]*\).log/\1/'`
(( last += 1 ))
mv access.log access_${last}.log
killall -HUP myprocess
第一行确实如下:
access_
答案 3 :(得分:0)
这次运行它的次数将保留计数值
LOCATION=/path/to/location
COUNT=`ls $LOCATION/access_*.log | wc -l`
COUNT=`expr $COUNT + 1`
cp $LOCATION/access.log $LOCATION/access_$COUNT.log
>$LOCATION/access.log