原始脚本:

原始脚本:

有人提供了这个日志轮换脚本。我想知道它背后的逻辑是什么。虽然我理解了所有内容,除了 --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")" \;

效果也会一样好。

相关内容