我正在尝试查找并删除.swp
当前目录中的所有文件。我正在使用以下命令:
rm -i `find . | grep .swp$`
但每次它都会给我这个错误:
rm: missing operand
Try `rm --help' for more information.
我做错了什么吗?
答案1
您收到的错误消息可能表明没有文件与名称模式匹配.swp$
。通常更安全的方法来执行您所写的操作(因为它将处理任何文件名):
find . -name '*.swp' -print0 | xargs -0 rm -i --
在上面的代码片段中,我使用-print0
so thatfind
分隔带有空字符的记录;默认值是换行符,不幸的是它在文件名中有效。使用 时-print0
,该命令适用于任何文件名,包括任何嵌入换行符的文件名。同样,xargs -0
将其输入处理为空分隔记录。
答案2
或者单独使用的变体find
,例如:
find . -name "*.swp" -ok rm {} +
或者只是没有确认(警告!):
find . -name "*.swp" -delete
答案3
始终使用最简单的工具来完成工作。由于您只想对当前目录进行操作,因此以下命令可以正常工作:
rm -i *.swp
答案4
有时交换文件不仅仅具有.swp
扩展名。它也可能有saw
、swb
、等扩展名。swp
sushil@batpod:/app/DDB# ls -a
.gui.py.swo
gui.py
.serializers.py.swp
serializers.py
.tcinfo.py.swm
tcinfo.py
.views.py.swb
views.py
等等...
我创建了一个命令,可以删除几乎所有扩展名的交换文件sw*
命令:
find . -name '*.sw\*' | xargs -i rm {}
笔记:在执行上面的命令之前,首先看一下命令要删除的文件,使用
find . -name '*.sw\*'
希望您不要删除一些重要文件。