我试图找到散布在子目录中的所有特定类型的文件,而出于我的目的,我只需要文件名。我尝试通过剥离路径组件basename
,但不适用于xargs
:
$ find . -name '*.deb' -print | xargs basename
basename: extra operand `./pool/main/a/aalib/libaa1_1.4p5-37+b1_i386.deb'
Try `basename --help' for more information.
通过以下两种变化之一,我得到相同的结果(完全相同的错误):
$ find . -name '*.deb' -print0 | xargs -0 basename
$ find . -name '*.deb' -print | xargs basename {}
另一方面,这可以按预期工作:
$ find . -name '*.deb' -exec basename {} \;
foo
bar
baz
这发生在最新的Cygwin和Debian 5.0.3上。我的诊断是xargs出于某种原因将两个输入行传递给basename,但是为什么呢?这里发生了什么?