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

おすすめ記事