파일 이름을 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

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

관련 정보