有人可以向我解释到底发生了什么,
正如xargs 的手册页所说(在-a选项下):“如果使用此选项,则运行命令时标准输入保持不变。否则,标准输入将从 /dev/null 重定向。”
由于您没有使用该-a选项,因此正在运行的每个rm -i命令xargs都从 /dev/null 获取其标准输入(即没有可用的输入)。当rm询问是否删除特定文件时,答案实际上是“否”,因为 /dev/null 没有给出答复。rm在其输入中接收到 EOF,因此它不会删除该文件,而是继续下一个文件。
我能做些什么来获得我想要的结果?
除了使用find -execunxnut 解释之外,另一种方法是使用-o(or --open-tty) 选项xargs:
find -name '#*#' -print0 | xargs -0 -o rm -i
这可能是理想的方式,因为它允许rm -i按照设计本身处理交互式确认。
另一种方法是使用-p(or --interactive) 选项xargs:
find -name '#*#' -print0 | xargs -0 -p rm
使用这种方法,xargs处理交互式确认而不是必须rm这样做。您可能还想使用-n 1,以便每个提示只询问一个文件:
find -name '#*#' -print0 | xargs -0 -p -n 1 rm
使用xargsover的优点find -exec是您可以将它与任何生成文件路径参数的命令一起使用,而不仅仅是find.