从远程计算机中删除文件

从远程计算机中删除文件

我删除带有通配符的文件

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

您已经使用了正确的语法。很可能没有与该模式匹配的文件名(事实上,这个已在评论中得到证实)。在这种情况下,您的 shell 不会展开该模式,并尝试将rm其作为参数进行调用。

如果不使用ssh本地,您也会遇到同样的问题:

$ rm /tmp/wont*match
rm: cannot remove '/tmp/wont*match': No such file or directory

切线讨论:

某些 shell(例如zsh默认的 shell)将不匹配的通配模式视为错误,这意味着如果模式与任何内容都不匹配,它甚至不会运行该命令:

$ rm /tmp/wont*match
zsh: no matches found: /tmp/wont*match

使用 shell 选项可以使shellbash以相同的方式进行操作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'

相关内容