Bash
從遠端機器中刪除文件
我刪除帶有萬用字元的文件
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 等)。
您已經在使用正確的語法。很可能沒有與該模式匹配的文件名(事實上,這已在評論中得到證實)。在這種情況下,您的 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
bash
可以使用其 shell 選項使 shell 以相同的方式執行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
,以防您想要確保該命令實際上刪除了一些東西。