![파일 이름을 xargs에 전달하고 자르는 방법은 무엇입니까? [폐쇄]](https://linux55.com/image/9158/%ED%8C%8C%EC%9D%BC%20%EC%9D%B4%EB%A6%84%EC%9D%84%20xargs%EC%97%90%20%EC%A0%84%EB%8B%AC%ED%95%98%EA%B3%A0%20%EC%9E%90%EB%A5%B4%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20%5B%ED%8F%90%EC%87%84%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