オリジナルスクリプト:

オリジナルスクリプト:

誰かがログローテーション用のスクリプトを提供しました。その背後にあるロジックを知りたいです。 --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:$2sh

したがって、スクリプトでは次のようになります。

-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")" \;

同様に機能したでしょう。

関連情報