对于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脚本完成此操作的 简单 方法是什么?
新答案
(2012年10月)
无需手动构建类路径列表。Java支持包含jar文件的目录的便捷通配符语法。
java -cp "$LIB/*"
(请注意,*
是 内 引号)。
来自的解释man java
:
为了特别方便,包含*的基本名称的类路径元素被认为等效于指定目录中所有带有扩展名
.jar
或.JAR
(Java程序无法区分两次调用之间的区别)的文件列表。例如,如果目录foo包含
a.jar
和b.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
那样)。
如果没有find
Mac OS X上的GNU ,则可以xargs
改用:
CLASSPATH=$(find "." -name '*.jar' | xargs echo | tr ' ' ':')
另一种(更奇怪的)方法是更改字段分隔符变量$IFS
。这看起来很奇怪,但是在所有文件名下都表现良好,并且仅使用shell内置程序。
CLASSPATH=$(JARS=("$LIB"/*.jar); IFS=:; echo "${JARS[*]}")
说明:
JARS
设置为文件名数组。IFS
更改为:
。$IFS
其用作数组条目之间的分隔符。表示文件名之间用冒号打印。所有这些都是在子Shell中完成的,因此对的更改$IFS
不是永久的(这将是baaaad)。
问题内容: 我想在当前位置的子目录之间进行迭代,并分别gzip每个文件。为了在目录中压缩文件,我使用 但这仅适用于当前目录,而不适用于当前目录的子目录。如何重写以上语句,以便也将所有子目录中的文件压缩? 问题答案: 不需要循环或除和以外的任何东西: 这将查找当前目录中及其下所有名称不以扩展名结尾的常规文件(即,所有尚未压缩的文件)。它分别在每个文件上调用。 编辑的基础上,从评论: 花括号()替换为
有没有办法使用来获取JAR目录中的“子资源”列表? 但我却找不到办法获得“孩子”资源。
可能重复: gzip一组目录并创建tar压缩文件 这篇文章描述了如何在一个目录结构中分别gzip每个文件。然而,我需要做一些稍微不同的事情。我需要为某个目录下的所有文件生成一个大的gzip文件。我还需要能够为压缩文件(例如files.gz)指定输出文件名,并覆盖旧的压缩文件(如果已经存在)。
问题内容: 如果要在中创建文件,可以执行以下操作: 另外,我想用于创建文件。那我该怎么办呢?由于某种原因,该文件未在正确的目录中创建。 问题答案: 最好的方法是:
所以我开始使用Neovim /Spacevim,它真是太棒了! 我仍然在习惯一切,因为我以前从未使用过Vim或类似的东西。 我的问题围绕着在当前打开的项目的所有文件中搜索特定文本。 我正在使用文件管理器,我想知道如何在项目中的所有文件中搜索特定字符串。就像如果我想在当前打开的文件夹/目录中搜索,我该如何去做?主要目标是列出包含此搜索字符串的所有文件。 我已经安装了(以及),但在搜索所有文件中的特定
问题内容: 在PHP中可以包含脚本目录吗? 即代替: 是否有类似的东西: 似乎找不到找到针对特定类的大约10个子类的集合的好方法。 问题答案: