如何将文件名传递给 xargs 并截断它们?

如何将文件名传递给 xargs 并截断它们?

我必须编写一个脚本来 ssh 进入服务器并截断日志文件。

我的脚本是:

#!/bin/bash

for server in $(cat c10_servers.txt); do
    ssh $server "ls /var/log/hello grep -i hello.log. | echo "" | xargs echo "" | sudo tee"
done

这只是显示文件的名称,我想知道我犯了什么错误,因为这不起作用。

答案1

代替:

ls /var/log/hello grep -i hello.log. | echo "" | xargs echo "" | sudo tee

尝试:

for f in /var/log/hello/*hello.log.*; do sudo truncate --size 0 "$f"; done

要通过 SSH 发送此内容,请将其放入单引号,不是双引号:

for server in $(cat c10_servers.txt); do
  ssh "$server" 'for f in /var/log/hello/*hello.log.*; do sudo truncate --size 0 "$f"; done'
done

您可以在不使用命令的情况下执行此操作truncate,但引用会变得更难看:

for server in $(cat c10_servers.txt); do
  ssh "$server" 'sudo sh -c '\''for f; do : > "$f"; done'\'' sudo-sh /var/log/hello/*hello.log.*'
done

如果您可以直接以 root 身份进行 SSH,则命令会更简单:

for server in $(cat c10_servers.txt); do
  ssh -l root "$server" 'for f in /var/log/hello/*hello.log.*; do : > "$f"; done'
done

相关内容