Jarring基于扩展名的目录中的所有文件

时间:2018-03-05 05:12:21

标签: java bash shell jar sh

我正在尝试使用Java使用jar命令将jar文件夹中的所有文件包含在内,如下所示,

jar -cvf /Abhishek/logs.jar my_directory/logs/*.logs*

我正在使用Java来执行此操作。

String cmd[] = {"jar", "-cvf", "/Abhishek/logs.jar", "my_directory/logs/*.logs*"};
pb = Runtime.getRuntime().exec(cmd);

但只有清单存储在jar中。

added manifest

当我解压缩jar文件时,我收到了清单文件。 所以我怀疑

*log.*

是否允许使用这种语法? 因为它在终端中运行良好。

有人可以对此有所了解吗?

谢谢。

2 个答案:

答案 0 :(得分:1)

在Linux上,文件通配由shell完成。因此,当您在终端输入<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="VIDEO_PARENT_CLASS" style="position: relative;"> <a href="#" class="vidUrl"> <div class="thumb-overlay"></div> <img class="thumb" src="http://lorempixel.com/300/200/"> </a> </div> <div class="VIDEO_PARENT_CLASS" style="position: relative;"> <a href="#" class="vidUrl"> <div class="thumb-overlay"></div> <img class="thumb" src="http://lorempixel.com/300/200/"> </a> </div>时,shell会将其扩展为匹配文件列表。然后将其传递给该计划。

如果直接执行程序,则必须自己扩展模式。或者您可以让shell使用类似于

的命令执行它
*.log

答案 1 :(得分:0)

您可能只想在jar命令使用的java.util.jar package中使用相同的类。这将避免第二个Java进程,并将避免依赖shell扩展:

try (JarOutputStream jar = new JarOutputStream(
        new BufferedOutputStream(
            Files.newOutputStream(
                Paths.get("/Abhishek/logs.jar"))));
    DirectoryStream<Path> dir = Files.newDirectoryStream(
        Paths.get("my_directory/logs"), "*.logs*")) {

    for (Path file : dir) {
        BasicFileAttributes attr =
            Files.readAttributes(file, BasicFileAttributes.class);

        String name = file.toString();
        if (attr.isDirectory()) {
            name = name + "/";
        }

        JarEntry entry = new JarEntry(name);
        entry.setLastModifiedTime(attr.lastModifiedTime());
        entry.setLastAccessTime(attr.lastAccessTime());
        entry.setCreationTime(attr.creationTime());
        entry.setSize(attr.size());

        jar.putNextEntry(entry);
        Files.copy(file, jar);
    }
}