와일드카드가 있는 파일을 삭제합니다.
rm /home/files/*.csv
하지만 SSH를 통해 원격 컴퓨터에서 명령을 실행하려고 하면
ssh user@ip 'rm /home/files/*.csv'
*.csv
파일을 삭제하려고 하는데 오류가 발생합니다.
rm: cannot remove '/home/files/*.csv': No such file or directory
rm
와일드카드를 보내는 올바른 구문은 무엇입니까 ssh
?
두 머신 모두 Ubuntu 20.04와 표준 프로그램(bash, ssh 등)이 있습니다.
답변1
올바른 구문을 사용했습니다. 패턴과 일치하는 파일 이름이 없을 가능성이 높습니다(사실 이댓글로 확인됨). 이 경우 쉘은 패턴을 확장하지 않고 rm
이를 인수로 호출하려고 시도합니다.
로컬을 사용하지 않으면 ssh
동일한 문제가 발생합니다.
$ rm /tmp/wont*match
rm: cannot remove '/tmp/wont*match': No such file or directory
접선 토론:
일부 쉘(예: zsh
기본 쉘)은 일치하지 않는 와일드카드 패턴을 오류로 처리합니다. 즉, 패턴이 아무것도 일치하지 않으면 명령을 실행하지도 않습니다.
$ rm /tmp/wont*match
zsh: no matches found: /tmp/wont*match
쉘 옵션을 사용하여 쉘이 bash
동일한 방식으로 작동하도록 만들 수 있습니다 failglob
. 다음 예에서는 rm
호출되지 않습니다.
$ shopt -s failglob
$ rm /tmp/wont*match
bash: no match: /tmp/wont*match
다음과 같은 호출에서 사용할 수 있습니다 ssh
.
ssh user@ip 'bash -O failglob -c "rm /home/files/*.csv"'
분명히 삭제하려는 파일 이름을 찾을 수 없다는 진단 메시지를 묵음으로 사용할 수 있지만 rm -f
(실제로 요청하는 경우) 종료 상태도 가려집니다.rm
명령이 실제로 무언가를 삭제했는지 확인하려는 경우.
답변2
찾을 수 없는 파일을 삭제하는 것에 대해 걱정하지 말라고 알려주는 플래그를 rm
사용하여 음소거 할 수 있습니다 .-f
ssh user@ip 'rm -f home/files/*.csv'