在此脚本中,它从文件中获取服务器列表vmr.txt当它试图找出超过500M的日志文件并移动后。
我坚持使用 find 重定向,将 find 的多个输出传递给 for 循环中的下一个命令。
#!/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
您应该避免处理 or 的输出ls
,这里相当于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
直接写入,/vmr/oldlog
而不是通过将该路径作为 gzip 目标的一部分来移动它