以下要求的shell脚本

时间:2017-06-21 12:26:16

标签: linux shell unix sh

我有一个名为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`

请帮帮我

4 个答案:

答案 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_
  • 开头的所有文件
  • 然后在第1场第8个角色
  • 上进行数字排序
  • 然后它只采用编号最高的第一行文件
  • 然后从字符串access_123.log
  • 中提取数字

答案 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