Como posso passar os nomes dos arquivos para xargs e truncá-los? [fechadas]

0

Eu tenho que escrever um script que irá ssh em servidores e truncar arquivos de log.

Meu script é:

#!/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

Isso apenas exibe os nomes dos arquivos, eu quero saber qual erro estou fazendo, pois isso não está funcionando.

    
por Rusty 18.06.2016 / 05:17

1 resposta

4

Em vez de:

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

Tente:

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

Para enviar isso por SSH, coloque-o em aspas simples e não em aspas duplas:

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

Você pode fazer isso sem o comando truncate , mas a cotação fica mais feia:

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

Se você pode usar o SSH como root diretamente, o comando é mais simples:

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