Bash

從遠端機器中刪除文件

  • May 1, 2021

我刪除帶有萬用字元的文件

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 ,以防您想要確保該命令實際上刪除了一些東西

引用自:https://unix.stackexchange.com/questions/647489