我正在嘗試刪除所有 vim 交換文件*.swp
並透過確認刪除它們。該find
命令找到了文件,但rm
帶有No such file or directory
選項-i
。當我對文件的路徑進行硬編碼並使用rm -i
時,它似乎可以工作。
見下文
(doors)hobbes3@hobbes3 ~/Sites $ find mysite mysite_BAK -name *.swp -exec 'rm -i {}' \;
find: rm -i mysite/templates/.base.html.swp: No such file or directory
find: rm -i mysite/templates/doors/orders/.create.html.swp: No such file or directory
find: rm -i mysite/templates/doors/orders/.detail.html.swp: No such file or directory
find: rm -i mysite/templates/doors/orders/.list.html.swp: No such file or directory
(doors)hobbes3@hobbes3 ~/Sites $ rm -i mysite/templates/.base.html.swp
remove mysite/templates/.base.html.swp? n
我想我的選項做錯了-exec
。有什麼建議麼?先致謝!
答案1
該錯誤是由尋找, 不是R M。
原因是你已經寫了它,所以'rm -i <file>'
是單一參數。這將被重寫:
find mysite mysite_BAK -name '*.swp' -exec rm -i '{}' \;
因此 find 在「-exec」之後取得多個參數,並將第一個參數視為命令,其他參數視為命令參數。
答案2
更新的答案:
如果您使用的是 bash 版本 >4.0,您可以使用 globstar 功能,這非常簡單:
shopt -s globstar
rm -i **/*.swp
這也適用於包含空格的檔案名稱!
該部分將啟動bash 中的shopt -s globstar
遞歸匹配。**
你可以把它放在你的身上.bashrc
,永遠幸福。
舊答案:
我通常發現組合使用簡單的工具會更容易
cd 到 dir 然後:
rm -i `find . | grep .swp$`
它更容易記住(如果性能不是問題)!
警告:僅當您的檔案名稱不包含空格時才使用此選項。
答案3
在你的情況下,我會跑,
find mysite mysite_BAK -type f -name .\*.sw? -exec rm -i {} ";"
VIM 的交換檔案不只以 .swp 結尾。如果 .swp 存在,VIM 將建立 .swo,然後是 .swn,依此類推。此外,交換檔案以點 (.) 為前綴,例如 .file1.rb.swp
其他無需確認(-i)即可尋找並刪除 VIM 交換文件的方法:
find some_dir -type f -name .\*.sw? | xargs rm
find some_dir -type f -name .\*.sw? -exec rm {} ";"
find some_dir -type f -name .\*.sw? -delete # -delete option does not work in Git Bash
如果沒有“-type f”,刪除目錄時會出現錯誤。此外,\
in.\*.sw?
也使其相容於多個平台。