使用 find 和 xargs 使用 rm 删除文件

Removing files with rm using find and xargs

当我做的时候

rm file.txt

rm *.txt

每个文件都会提示我,因为我没有为 rm 指定 -f 选项。

但是当我这样做时:

find . -type f -name '*.txt' | xargs rm

未经确认删除文件。

这背后的逻辑是什么?是否可以在某些文档中找到原因?我无法解释为什么会这样。

您将 rm 命令的别名设置为 'rm -i'。因此,如果您直接调用命令,如

rm file.txt

rm *.txt

别名将被扩展。如果您将使用 xargs 调用它,如

find . -type f -name '*.txt' | xargs rm

rm 作为简单的字符串参数传递给 xargs,稍后由 xargs 调用而无需 shell 的别名替换。 您的别名可能已在 ~/.bashrc 中定义,以防您要删除它。

根据您的 xargs 版本,您可能可以使用 --no-run-if-empty GNU 扩展选项:

find . -type f -name '*.txt' | xargs  --no-run-if-empty  rm -rf

您可以使用这个简单的命令来解决您的问题

find . --type f -name '*.txt' -delete