我正在尝试删除所有 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?
还使其兼容多个平台。