이 스크립트에서는 파일에서 서버 목록을 가져옵니다.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