원본 스크립트:

원본 스크립트:

누군가 로그 회전을 위해 이 스크립트를 제공했습니다. 그 뒤에 논리가 무엇인지 알고 싶습니다. 비록 나에게 약간 혼란스러웠던 --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")" \;

잘 작동했을 것입니다.

관련 정보