获取-C指定的tar文件夹中的所有文件

时间:2014-07-27 18:43:43

标签: c tar

我一直在四处寻找并进行测试,我觉得没有解决办法,但我想在放弃之前提出问题。

我通过C创建tar文件,这会在某些时候产生这条指令:

execlp("tar", "tar", "czf", file_folder_out, "-C", file_folder_in, "./*", NULL);

在终端

中等效
tar -czf /home/Skywalker/.tmp/test.tar.gz -C /home/Skywalker/.tmp/pack ./*

有没有办法从-C-C文件夹中获取所有文件而不手动指定它们(用readdir读取它们),并以root身份使用它们(不添加pack文件夹或。文件夹作为根文件夹)?我尝试了很多组合,但没有工作。

1 个答案:

答案 0 :(得分:3)

您的意图是./*是一个glob模式,指定当前目录中的所有文件(不以.开头)。没有shell时它不起作用,因为它被shell扩展为当前目录中所有文件的列表。

我希望您意识到该命令不会归档所有 file_folder_in指定的目录中的文件,因为./*扩展到文件列表在当前目录中。它尝试归档file_folder_in中与当前目录中的文件或目录名匹配的文件和子目录(不以.开头)。

(按照惯例,*(和等效的./*)与以点开头的文件不匹配。)

我非常怀疑你打算执行

execlp("tar", "tar", "czf", file_folder_out, "-C", file_folder_in, ".", NULL);

代替,它告诉tar归档file_folder_in目录中的所有文件和子目录。

以上 包含以.开头的文件。如果你想避免使用

execlp("tar", "tar", "czf", file_folder_out, "-C", file_folder_in, "--exclude", ".[^/]*", ".", NULL);

告诉tar排除以.开头的文件和目录(但不仅仅是./,它指定当前目录)。我相信排除支持对于所有tar变体都是通用的(我知道它应该适用于GNU tar和FreeBSD tar,但我不确定其他任何变量),所以它 应该工作tar变种 - 但出于完整性和可移植性的原因,我个人不会排除点文件。

有问题吗?