rsync에서 출력 파일 및 변수 읽기

rsync에서 출력 파일 및 변수 읽기

누구든지 이것에 대해 조언을 할 수 있습니까?

내가 실행한 mysql 쿼리에서 출력 파일을 가져오고 싶습니다.

$code    $IP
123456   192.168.26.176
10051    192.168.20.80
234567   192.168.26.178

명령으로 실행하십시오.

rsync -rvp *.$code.extension root@$IP:/path/of/dest

나는 이것을 시도하고 있습니다 :

while read -r line ; do echo 
"$SOURCE_TRANSMIT_DIR"*."$code".class.json 
"$DEST_HOST"@"$IP":"$DEST_TRANSMIT_DIR" ; done

내가 얻는 결과는 다음과 같습니다.

/opt/file/outgoing/*.123456
10051
234567.class.json [email protected]
192.168.20.80
192.168.26.178:/opt/file/incoming/

다음과 같이 별도의 rsync 명령으로 읽으려고 합니다.

rsync -rvp *.123456.extension [email protected]:/path/of/dest
rsync -rvp *.234567.extension [email protected]:/path/of/dest
rsync -rvp *.345678.extension [email protected]:/path/of/dest

이것이 더 나은 설명이기를 바랍니다. 설명이 부족해서 죄송합니다.

답변1

mysql 쿼리의 결과를 볼 수는 없지만 쿼리를 실행하고 awk로 구문 분석하여 원하는 것을 인쇄할 수 있습니다(튜플 및 헤더 인쇄를 방지하려면 mysql 옵션 참조 -raw 또는 이와 유사).

mysql -printingoptions "your query" |awk '{print "rsync -rvp *."$1".extension  root@"$2":/path/of/dest"}' 

sh 또는 bash로 파이프한 다음 (command | sh) rsync를 수행할 수 있습니다. :)

나에게는 가장 쉬운 방법인 것 같다.

답변2

다음 명령을 통해 mysql-query의 출력을 실행하면 원하는 출력이 제공됩니다. 이 출력을 파일로 전송하고 파일을 셸 스크립트로 실행하는 등의 평가에 사용할 수 있습니다.

mysql | grep -v '\$' | while read line; do echo "${line}" | sed 's#\(^[0-9]*\)[\ ]*\([0-9\.]*\)#rsync -rvp *.\1.extension root@\2:/path/of/dest#g'; done

명령의 세부정보는 다음과 같습니다.

mysql               # Your command with output (this is of course longer than this)
grep -v '\$'        # Exclude the header
while read line; do # Start a while-loop
echo "${line}"      # Echo the contents of the current line that we've read to the next command
# Regular expression to filter the number and the IP and add these to the command, they are held by the variables \1 \2.
sed 's#\(^[0-9]*\)[\ ]*\([0-9\.]*\)#rsync -rvp *.\1.extension root@\2:/path/of/dest#g'
done;               # Close the while loop

정규식의 내용은 다음과 같습니다.

(^[0-9]*\)   # From the beginning (^), zero or more (*) numerical [0-9] character
[\ ]*        # Zero or more (*) spaces. These are not in brackets, so they won't be matched into a variable.
([0-9\.]*    # Zero or more (*) numerical characters or points [0-9\.]

관련 정보