使用 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
当我做的时候
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