是否可以从“ls”命令中删除文件夹前缀

是否可以从“ls”命令中删除文件夹前缀

我在 bash 脚本中,我想获取所有文件的列表(假设所有 jar 文件)。我执行命令ls -1 lib/*.jar并得到输出:

lib/mylib_1.jar
lib/mylib_2.jar
...

是否有任何选项可以产生以下输出:

mylib_1.jar
mylib_2.jar
...

制作cd lib之前不是一个选项,因为我处于循环中,并且需要位于父文件夹中才能在循环内执行我想要执行的操作。

我尝试通过打字查找信息man ls,但没有找到任何解决方案。

ls只要我可以将其传送到我的命令或自给自足,使用另一个命令的解决方案就很好。

答案1

代替解析 ls你应该使用find。然后您还可以basename在每个文件上执行以删除前导目录:

find lib/ -name '*.jar' -exec basename {} \;

答案2

使用 GNUfind不需要basename为每个文件运行,这会快得多(特别是如果有很多文件):

find lib -name '*.jar' -printf '%P\n'

答案3

(cd lib && echo *.jar)假设文件名中没有空格或特殊字符,怎么样?父脚本永远不会更改目录。

答案4

find可能是要走的路,但如果你真的,真的(你不想)想lib/从 中剥离ls -1,你可以使用sed

$ ls -1 lib/*.jar | sed 's#^lib/##'
mylib_1.jar
mylib_2.jar

相关内容