如何递归删除文件名或扩展名中包含波浪号的文件?
例如 vim 的文件,其名称类似.my_file.c.un~
?
我正在使用这个查找序列:
find . -name "*.un~" -o -name "*.swo" -o -name "*.swp" -exec rm -f {} \;
但它不会删除文件。仍在运行,仅正确find
显示文件列表:
./.my_file.c.un~
./.my_file.c.swp
./.file2.c.un~
此外,使用纯净水去除它们rm -f .my_file.c.un~
效果很好。将 改为-exec rm -f {} \;
蒸馏水-delete
没有帮助。
答案1
当使用多个逻辑运算时,需要用括号对它们进行分组,如下所示:
find . \( -name "*.un~" -o -name "*.swo" -o -name "*.swp" \) -delete
其中您必须使用反斜杠或引用括号 ( '(' ... ')'
) 以避免 shell 解析这些特殊字符。
在上面的例子中,我使用了自动删除文件-delete
的方法-exec rm -f {}
,所以你不必担心带有空格的文件,否则最终可能会导致坏的为你。
欲了解更多语法示例,请查看man find
。
也可以看看: