我怎样才能让ls和xargs组合省略path

我有一个名为lib的文件夹。 在那个文件夹中有一些文件。 我想获取以.jar结尾的文件的所有名称,并将它们连接成一行,用空格分隔。 我根本不需要path名。

我试过这个:

ls lib/*.jar | xargs 

和输出是

 lib/file1.jar lib/file2.jar 

但是我想要得到的是

 file1.jar file2.jar 

我怎样才能做到这一点?

我也试过找,但我得到同样的问题

 find lib -name *.jar | xargs 

而另一个find lib -maxdepth 1 -name *.jar -printf '%f\n' | xargs find lib -maxdepth 1 -name *.jar -printf '%f\n' | xargs

  %f File's name with any leading directories removed (only the last element). 

只是为了表明你可以用不同的方式实现:如果你使用bash,你可以这样做:

for i in lib/*.jar; do echo ${i#*/}; done|xargs

要么

echo $(for i in lib/*.jar; do echo ${i#*/}; done)

这对我来说很有效,虽然看起来应该有一个更简单的(即不那么讨厌和更漂亮)的方式:

 $ ls lib / *。jar |  xargs -n 1 basename |  xargs的

来自coreutils的basename是一个选项。
find lib -maxdepth 1 -name *.jar -exec basename {} \; | xargs


公然从马克·瓦格纳 ( Mark Wagner)撕掉,但没有额外的电话给xargs。
find lib -maxdepth 1 -name *.jar -printf '%f '