![原始脚本:](https://linux22.com/image/1567278/%E5%8E%9F%E5%A7%8B%E8%84%9A%E6%9C%AC%EF%BC%9A.png)
有人提供了这个日志轮换脚本。我想知道它背后的逻辑是什么。虽然我理解了所有内容,除了 --exec,这对我来说有点令人困惑。
原始脚本:
#!/bin/bash
set -x
NOW=$(date +"%m-%d-%Y")
echo $
cd /home/cloud360mssadmin/
find Tahoe-Broadcast.log.* -exec sh -c 'mv "$0" "/home/cloud360mssread/$0-`date +"%d-%m-%Y"`"' {} \;
我认为“echo $”缺少变量。
我以不同的方式实现了相同的脚本(仅用于测试目的),并且已成功执行。
#!/bin/bash
# this is scrpt for the log rotation
set -x
cd /var/log
echo " we are enter the `pwd`"
NOW="$(date +'%d-%m-%y')"
echo $NOW
find vmware* -exec mv '{}' /home/vinod/ \;
cd /home/vinod/
find vmware* -exec tar -rvf vmware.tar {} \;
我的任务是旋转日志并压缩它。
答案1
尝试:
sh -c 'echo 0:$0, 1:$1, 2:$2' one two three
得出:
0:one, 1:two, 2:three
换句话说,sh -c
启动一个临时脚本 ( echo 0:$0, 1:$1, 2:$2
),该脚本接收 的其余参数sh
作为其自己的参数。通常,这些参数中的第一个被假定为命令名称(但这是一种惯例)。
因此在你的脚本中:
-exec sh -c 'mv "$0" "/home/cloud360mssread/$0-`date +"%d-%m-%Y"`"' {} \;
正在执行:
mv {the_file} /home/cloud360mssread/{the_file}-{timestamp}
这有点牵强,因为:
-exec mv "{}" "/home/cloud360mssread/{}-$(date +"%d-%m-%Y")" \;
效果也会一样好。