有人可以向我解释到底发生了什么,
正如xargs 的手册页所说(在-a
选项下):“如果使用此选项,则运行命令时标准输入保持不变。否则,标准输入将从 /dev/null 重定向。”
由于您没有使用该-a
选项,因此正在运行的每个rm -i
命令xargs
都从 /dev/null 获取其标准输入(即没有可用的输入)。当rm
询问是否删除特定文件时,答案实际上是“否”,因为 /dev/null 没有给出答复。rm
在其输入中接收到 EOF,因此它不会删除该文件,而是继续下一个文件。
我能做些什么来获得我想要的结果?
除了使用find -exec
unxnut 解释之外,另一种方法是使用-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
使用xargs
over的优点find -exec
是您可以将它与任何生成文件路径参数的命令一起使用,而不仅仅是find
.