for循环下如何使用for循环

for循环下如何使用for循环

在此脚本中,它从文件中获取服务器列表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 目标的一部分来移动它

相关内容