このスクリプトはファイルからサーバーのリストを取得します。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