如何解决如何在execv的一行中没有父文件和根文件的情况下进行tar压缩
在这个网站上已经用各种不同的解决方案问过这个问题一百万次,但似乎没有一个适合我的情况。
到目前为止,最有前途的是tar -cvf testetest.tar -C folder1 *
,其中folder1包括:
Folder1
>txt1.txt
>folder2
>txt2.txt
在终端中运行以上代码将创建testtest.tar
,其中包括一堆错误消息:
txt1.txt
folder2
>txt2.txt
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 举报,一经查实,本站将立刻删除。