假設我myFile.txt在本地目錄中有一個名為的檔案~/local/directory,那么以下命令會按預期產生結果(完整檔案路徑后跟檔案名):
find ~/local/directory -type f -iname '*myFile*' | xargs -I{} sh -c '{ echo {}; echo $(basename {}); }'
但是,現在假設我在遠程系統myFile2.txt的目錄中有一個名為. 嘗試遠程運行上面的相同命令兩次都列印出完整的檔案路徑,就好像沒有作業一樣。我究竟做錯了什么?~/test/directoryremote-hostbasename
ssh -q remote-host "find ~/test/directory -type f -iname '*myFile*' | xargs -I{} sh -c '{ echo {}; echo $(basename {}); }'"
(我的最終目標是find在遠程環境中回傳的檔案上運行 rsync 并將它們在本地保存回特定目錄,但在檔案名中添加了前綴,因此需要基本名稱。這似乎更可行使用 xargs 而不是 rsync 的-exec選項。 )
uj5u.com熱心網友回復:
您需要轉義,$以便將其按字面意思發送到遠程機器。否則,$(basename {})在本地執行,并將輸出{}代入ssh引數。
ssh -q remote-host "find ~/test/directory -type f -iname '*myFile*' | xargs -I{} sh -c '{ echo {}; echo \$(basename {}); }'"
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/447218.html
上一篇:使用BASH腳本PING多個引數
下一篇:快速位元組復制C 11
