Shell
如何刪除或訪問名稱中帶有反斜杠 的文件?
我在這裡有一些文件,我使用 python 模組 pysftp 複製到這個 linux 機器上:
[jm@spartan tf]$ ls -la total 0 drwxrwxrwx. 3 jm jm 69 Aug 14 13:50 . drwxrwxrwt. 9 root root 238 Aug 14 13:49 .. -rwxrwxrwx. 1 jm jm 0 Aug 14 13:49 .\gitkeep drwxrwxrwx. 2 jm jm 6 Aug 14 13:50 .\innerfile -rwxrwxrwx. 1 jm jm 0 Aug 14 13:50 .\innerfile\gitkeep [jm@spartan tf]$ rm .\gitkeep rm: cannot remove ‘.gitkeep’: No such file or directory
它們是隱藏的,所以我仍在嘗試弄清楚如何複製然後將它們隱藏起來,但同時我想刪除它們,但我做不到。這裡發生了什麼?
我在 CentOS 7 上。
您真正需要做的是修復您的腳本,以便將 Windows 路徑轉換為 Unix 路徑。一種相對簡單的方法是將路徑分隔符排除在等式之外:不是提供要複製的完整路徑名,而是遞歸遍歷目錄,在遠端端創建目標目錄並僅指定文件名而不是完整路徑。:)
但在達到這一點之前,您需要保護反斜杠免受 shell 的影響。您可以通過使用單引號引用來做到這一點(反斜杠被解釋為雙引號內的某些字元)。請特別注意,萬用字元在引號之外,因此 shell 將其視為萬用字元而不是文字
*
: :)
rm -rv '.\'*
或者您可以通過轉義反斜杠來做到這一點(這也可以在雙引號中使用,但這裡不需要雙引號):
rm -rv .\\*
我建議,在使用萬用字元刪除內容之前,您始終首先
ls
使用相同的參數執行,然後使用向上箭頭呼叫最後一個命令,您可以在其中ls
將rm
. 這樣您就可以在文件被刪除之前查看文件列表,從而防止出現潛在的大錯誤。:) 在這種情況下,我也非常喜歡使用-v
withrm
。sauer@lightning:/tmp> ls -vr .\\* .\innerfile\gitkeep .\gitkeep .\innerfile: sauer@lightning:/tmp> rm -vr .\\* removed '.\gitkeep' removed directory '.\innerfile' removed '.\innerfile\gitkeep'