使用bash,如何从目录中的所有文件中创建类路径?

gMale:

对于bash大师来说,这将是一个非常简单的免费赠品:

使用bash,如何从目录中的所有文件中创建类路径?


细节

给定目录:

LIB=/path/to/project/dir/lib

除了* .jar文件外,仅包含以下内容:

junit-4.8.1.jar
jurt-3.2.1.jar
log4j-1.2.16.jar
mockito-all-1.8.5.jar

我需要以以下形式创建用冒号分隔的类路径变量:

CLASSPATH=/path/to/project/dir/lib/junit-4.8.1.jar:/path/to/project/dir/lib/jurt-3.2.1.jar:/path/to/project/dir/lib/log4j-1.2.16.jar:/path/to/project/dir/lib/mockito-all-1.8.5.jar

几乎可以表达我正在寻找的逻辑的一些伪代码大致如下:

for( each file in directory ) {
   classpath = classpath + ":" + LIB + file.name
}

通过bash脚本完成此操作简单方法是什么

约翰·库格曼(John Kugelman):

新答案
(2012年10月)

无需手动构建类路径列表。Java支持包含jar文件的目录的便捷通配符语法。

java -cp "$LIB/*"

(请注意,*引号)。

来自的解释man java

为了特别方便,包含*的基本名称的类路径元素被认为等效于指定目录中所有带有扩展名.jar.JAR(Java程序无法区分两次调用之间的区别)的文件列表。

例如,如果目录foo包含a.jarb.JAR,则将类路径元素foo/*扩展为A.jar:b.JAR,除非未指定jar文件的顺序。列表中包含指定目录中的所有jar文件,甚至是隐藏的jar文件。仅由组成的类路径条目*扩展为当前目录中所有jar文件的列表。CLASSPATH环境变量,其中所定义,将类似地扩展。任何类路径通配符扩展都会在Java虚拟机启动之前发生-除了查询环境之外,任何Java程序都不会看到未扩展的通配符。


旧答案

简单但不完美的解决方案:

CLASSPATH=$(echo "$LIB"/*.jar | tr ' ' ':')

有一个小缺陷,那就是不能正确处理带有空格的文件名。如果那很重要,请尝试以下更复杂的版本:

更好

CLASSPATH=$(find "$LIB" -name '*.jar' -printf '%p:' | sed 's/:$//')

这仅在您的find命令支持时才起作用-printf(如GNU find那样)。

如果没有findMac OS X上的GNU ,则可以xargs改用:

CLASSPATH=$(find "." -name '*.jar' | xargs echo | tr ' ' ':')

最好?

另一种(更奇怪的)方法是更改​​字段分隔符变量$IFS这看起来很奇怪,但是在所有文件名下都表现良好,并且仅使用Shell内置程序。

CLASSPATH=$(JARS=("$LIB"/*.jar); IFS=:; echo "${JARS[*]}")

说明:

  1. JARS 设置为文件名数组。
  2. IFS更改为:
  3. 回显该数组,并将$IFS其用作数组条目之间的分隔符。表示文件名之间用冒号打印。

所有这些都是在子shell中完成的,因此对的更改$IFS不是永久的(这将是baaaad)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用bash查找目录中的所有文件路径

如何在bash中读取所有子目录并创建相应的文件?

如何使用pathlib在文件夹中创建包含所有文件路径的列表

Bash:处理目录中的所有文件

如何使用Powershell为目录中的所有.exe文件同时创建几个快捷方式

如何使用bash将所有csv文件的前200行保存在目录中?

如何使用bash列出目录中的所有pdf文件,按字母倒序排序?

如何使用bash删除目录中的所有文件夹?

Shell /终端:使用目录的绝对路径对目录中的所有文件执行命令

如何在bash中gzip所有子目录中的所有文件

如何使用批处理作业将文件“创建日期”添加到目录中的所有文件中?

如何使用python导入路径中的所有文件

如何在python中包含给定路径中的所有文件以及子目录的所有文件?

如何制作在目录所有者拥有的目录中创建的文件?

如何使用rclone删除远程目录中的所有文件?

如何使用Streams从目录中逐行读取所有文件?

如何使用Laravel读取目录中的所有文件内容

如何使用python动态列出目录中的所有文件?

如何使用Pharo在目录中查找所有.csv文件?

如何使用grep查找目录中的所有zip文件?

如何使用ffmpeg转码目录中的所有文件

如何使用scala从hdfs目录中删除所有文件

如何列出具有绝对路径的目录中的所有文件

如何列出没有路径的子目录中的所有文件?

在Bash脚本中,如何使用`dirname`函数将目录更改为文件的目录路径?

如何使用vim打开当前目录和所有子目录中的所有文件?

如何从目录中删除所有文件?

如何使用Bash搜索路径中包含给定子字符串的所有文件/文件夹?

如何使用C#中的所有权限在C目录中创建文件夹?