Linux

xargs 刪除包含 $ 的文件名

  • February 26, 2013

我正在使用 xargs 從遠端伺服器中刪除文件。

xargs -a /var/log/del.log -i -exec  ssh root@abc.com 'rm  -rf "{}"'

del.log包含在本地伺服器上刪除的文件的路徑,我想在遠端伺服器上刪除它們。一切正常,但是當它們是臨時辦公室文件時,問題就開始了,例如~$excel.xlsx當文件命名發生這樣的情況時,xargs 使命令變得像這樣。

ssh root@abc.com 'rm -rf "~.xlxs"'  - which is wrong,

它應該像 -ssh root@abc.com 'rm -rf "~$excel.xlxs"'

為什麼 xargs 會這樣做?可能是 xargs 將其排除在變數之外。我需要一些解決方案。

或者有沒有更好的方法從遠端伺服器中刪除文件?前提是本地伺服器具有需要遠端刪除的路徑列表。

xargs -a /var/log/del.log -i -exec  ssh root@abc.com 'rm  -rf "{}"'

交換單引號和雙引號:

xargs -a /var/log/del.log -i -exec  ssh root@abc.com "rm  -rf '{}'"

然後命令將擴展為:

ssh root@abc.com "rm -rf '~$excel.xlxs'"

它工作正常,因為:

man bash:

將字元括在單引號中會保留引號內每個字元的字面值。單引號之間不能出現單引號,即使前面有反斜杠。

用雙引號括起來的字元會保留引號內所有字元的字面值,除了 $,, \, and, when history expansion is enabled, !. The characters $ and 在雙引號內保留它們的特殊含義。

引用自:https://serverfault.com/questions/482619