搜索并替换零大小的文件

时间:2016-06-13 08:57:43

标签: bash file replace cron find

我试图获取一些零大小的文件并插入文本。我创建了一个简单的脚本,并且每15分钟将它放在crontab中。

我在How to find all Zero bytes files in directory including subdirectories之前阅读此问题后使用find

这是剧本。

#!/usr/bin/bash
statPath=/opt/player/for_test/testing
date=`date +%Y%m%d` #Untuk mengambil tanggal (YYYY-MM-DD)
cm=$(date +%M)
host=`hostname`

for n in `find $statPath -size 0`
do
if [ $cm -ge 0 ] && [ $cm -le 15 ];then
    echo $date"00""|"$host"|"0x00"|"0 >> $n
elif [ $cm -ge 16 ] && [ $cm -le 30 ];then 
    echo $date"15""|"$host"|"0x00"|"0 >> $n
elif [ $cm -ge 31 ] && [ $cm -le 45 ];then 
    echo $date"30""|"$host"|"0x00"|"0 >> $n
elif [ $cm -ge 46 ] && [ $cm -le 59 ];then
    echo $date"45""|"$host"|"0x00"|"0 >> $n
fi
done

运行脚本之前在testing目录中的文件

-rw-r--r--   1 root     root           0 Jun 13 13:46 Server01_2016061313_45.log
-rw-r--r--   1 root     root           0 Jun 13 14:01 Server01_2016061314_00.log
-rw-r--r--   1 root     root           0 Jun 13 14:16 Server01_2016061314_15.log
-rw-r--r--   1 root     root           0 Jun 13 14:31 Server01_2016061314_30.log
-rw-r--r--   1 root     root           0 Jun 13 14:46 Server01_2016061314_45.log
-rw-r--r--   1 root     root           0 Jun 13 15:01 Server01_2016061315_00.log

运行脚本后在testing目录中的文件。

-rw-r--r--   1 root     root           28 Jun 13 13:46 Server01_2016061313_45.log
-rw-r--r--   1 root     root           28 Jun 13 14:01 Server01_2016061314_00.log
-rw-r--r--   1 root     root           28 Jun 13 14:16 Server01_2016061314_15.log
-rw-r--r--   1 root     root           28 Jun 13 14:31 Server01_2016061314_30.log
-rw-r--r--   1 root     root           28 Jun 13 14:46 Server01_2016061314_45.log
-rw-r--r--   1 root     root           28 Jun 13 15:01 Server01_2016061315_00.log

我得到的结果是所有文件都以相同的格式更改。我在下午3:34运行脚本。

root@Server01:/opt/player/for_test/testing# more Server01_2016061313_45.log
2016061330|Server01|0x00|0
root@Server01:/opt/player/for_test/testing#
root@Server01:/opt/player/for_test/testing# more Server01_2016061314_15.log
2016061330|Server01|0x00|0

预期结果

For log with "00" minute, the result is 2016061300|Server01|0x00|0
For log with "15" minute, the result is 2016061315|Server01|0x00|0
For log with "30" minute, the result is 2016061330|Server01|0x00|0  
For log with "45" minute, the result is 2016061345|Server01|0x00|0

有没有简单的方法可以做到这一点?我有点卡在这里。

1 个答案:

答案 0 :(得分:0)

您需要从文件名中获取cm。假设您始终需要.log之前的最后两个字符,则可以使用cm=${n: -6:2}获取它们。这是致电Parameter Expansion。必须为cm中的每个循环计算for

<强>解释

  • ${}表示您使用参数扩展

  • 来自字符串n的字符2

  • 之前从6开始提取n字符

我使用this post作为参考。