如何在execv的一行中没有父文件和根文件的情况下进行tar压缩

如何解决如何在execv的一行中没有父文件和根文件的情况下进行tar压缩

在这个网站上已经用各种不同的解决方案问过这个问题一百万次,但似乎没有一个适合我的情况。

到目前为止,最有前途的是tar -cvf testetest.tar -C folder1 *,其中folder1包括

Folder1
    >txt1.txt
    >folder2
        >txt2.txt

在终端中运行以上代码将创建testtest.tar,其中包括一堆错误消息:

txt1.txt
folder2
    >txt2.txt

但是,当像这样通过execv函数中运行时:

pid_t archive = fork();
    switch(archive)
    {
        case -1 :
        {
            printf("fork() Failed\n");
            break;
        }
        case 0 :
        {
            if( strcmp(getFileExtension(finalArchiveName),"tar") == 0)
            {
                char* args[] = {"/usr/bin/tar","-cvf",finalArchiveName,"-C","dest","*",NULL};
                int error = execv("/usr/bin/tar",args);    
                if(error == -1){
                    perror("Error when archiving");
                    exit(EXIT_FAILURE);
                }
                else{
                    exit(EXIT_SUCCESS);
                }
                break;
            }
//... (not including the whole function,only the part i feel is relevant to the question)

它返回/usr/bin/tar: *: Cannot stat: No such file or directory

我烦恼的另一行是将*替换为.,但是最终包括根目录

解决方法

如在shell中键入*所见,该shell用文件名列表替换了echo *。但是除非您专门执行shell,否则对execv的调用中没有shell:

char* args[] = {"sh","-c","tar /usr/bin/tar -cvf testetest.tar -C dest *",NULL};
int error = execv("/bin/sh",args);

在这种情况下,system()通常是一个更简单的选择。

如果要创建文件名列表以作为参数传递给命令行实用程序,请查看glob()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?