我在 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