![ファイル名をxargsに渡して切り取る方法は? [閉鎖]](https://linux33.com/image/9158/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%90%8D%E3%82%92xargs%E3%81%AB%E6%B8%A1%E3%81%97%E3%81%A6%E5%88%87%E3%82%8A%E5%8F%96%E3%82%8B%E6%96%B9%E6%B3%95%E3%81%AF%EF%BC%9F%20%5B%E9%96%89%E9%8E%96%5D.png)
サーバーに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
command を使用せずにこれを行うことができますが、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
ルートとして直接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