如何使用 find 的多个 -name 参数删除文件?

如何使用 find 的多个 -name 参数删除文件?

如何递归删除文件名或扩展名中包含波浪号的文件?

例如 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

也可以看看:

相关内容