for 루프 아래에서 for 루프를 사용하는 방법

for 루프 아래에서 for 루프를 사용하는 방법

이 스크립트에서는 파일에서 서버 목록을 가져옵니다.vmr.txt500M이 넘는 로그 파일을 찾아 이동하려고 할 때.

for 루프에서 find의 여러 출력을 다음 명령으로 전달하는 find 리디렉션을 고수했습니다.

#!/bin/bash -x

$tdate=`date +%Y%m%d-%H%M%S`

for vm in `(cat /nodes/vmr.txt | awk '{print$2}'|| sed -e 's/[[:space:]]*$//')`
do

ssh pbc01@$vm `find /var/log/vmr/ -type f -size +500M |grep -v ".gz"`

ssh pbc01@$vm gzip -c $file > "$file"."$tdate".gz && cp -v /dev/null "$file"
ssh pbc01@$vm  mv /var/log/vmr/*.gz /vmr/oldlog/
  done

답변1

ls여기서는 or 의 출력을 처리하지 않아야 합니다 find. 그러나 수행할 작업은 단일 find 명령이면 됩니다.

ssh pbc01@"$vm" find /var/log/vmr -type f -size +500M -not -name '*gz' -exec sh -c 'gzip -c "$1" > "$1.$tdate.gz"' "" {} \; -exec truncate -s 0 {} \;

경로를 gzip 대상의 일부로 만들어 경로를 이동하는 대신 gzip직접 작성할 수도 있습니다./vmr/oldlog

관련 정보