我正在尝试删除所有 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
Run Code Online (Sandbox Code Playgroud)
我想我在这个-exec
选项上做错了什么。有什么建议?提前致谢!
错误是由find生成的,而不是rm。
原因是你已经写了它,所以'rm -i <file>'
是单个参数。这将被重写:
find mysite mysite_BAK -name '*.swp' -exec rm -i '{}' \;
Run Code Online (Sandbox Code Playgroud)
所以 find 在“-exec”之后得到多个参数,并将第一个作为命令,其他作为命令参数。
更新的答案:
如果您使用 bash 版本 >4.0,您可以使用 globstar 功能,这非常简单:
shopt -s globstar
rm -i **/*.swp
Run Code Online (Sandbox Code Playgroud)
这也适用于包含空格的文件名!
该shopt -s globstar
部分将激活**
bash 中的递归匹配。你可以把它放在你的.bashrc
身上,永远快乐。
旧答案:
我通常发现结合使用简单的工具更容易
cd 到目录,然后:
rm -i `find . | grep .swp$`
Run Code Online (Sandbox Code Playgroud)
它更容易记住(如果性能不是问题)!
警告:仅当您的文件名不包含空格时才使用此选项。
归档时间: |
|
查看次数: |
11542 次 |
最近记录: |