原始腳本:

原始腳本:

有人給出了這個用於日誌輪換的腳本。我想知道背後的邏輯是什麼。雖然我明白除了 --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")" \;

也會同樣有效。

相關內容