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