Linux
xargs 刪除包含 $ 的文件名
我正在使用 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'"
它工作正常,因為:
將字元括在單引號中會保留引號內每個字元的字面值。單引號之間不能出現單引號,即使前面有反斜杠。
用雙引號括起來的字元會保留引號內所有字元的字面值,除了 $,
, \, and, when history expansion is enabled, !. The characters $ and
在雙引號內保留它們的特殊含義。