如何使 ls 和 xargs 组合省略路径

如何使 ls 和 xargs 组合省略路径

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

我尝试过这个:

ls lib/*.jar | xargs

输出为

lib/file1.jar lib/file2.jar

但我想要的是

file1.jar file2.jar

我怎样才能做到这一点?

我也尝试过查找,但遇到了同样的问题

find lib -name *.jar | xargs

答案1

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

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

答案2

这对我有用,但似乎应该有一个更简单(即更少黑客和更漂亮)的方法:

$ ls lib/*.jar | xargs -n 1 基本名称| xargs

答案3

只是为了说明您可以通过不同的方式实现相同的目的:如果您使用 bash,您可以执行以下操作:

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

或者

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

答案4

老问题了,但如果要使用 find,最好只使用 -exec,而不是通过管道传输到 xargs。这样原来的问题就解决了,因为不需要从文件名中删除路径。

相关内容