【发布时间】:2019-11-05 04:08:21
【问题描述】:
Linux
完全是菜鸟问题,但我自己无法理解。我正在使用来自http://www.feep.net/libtar/的libtar
我已经对几个文件进行了 zlib 化,并通过 libtar 对其进行了 tar 化处理。
TAR *pTar;
snprintf(tar_name,sizeof(tar_name),"%s.tar",BACKUP_TASK.path_to_backup);
tar_open(&pTar, tar_name, NULL, O_WRONLY | O_CREAT, 0777, TAR_GNU);
tar_append_tree(pTar, BACKUP_TASK.path_to_backup, BACKUP_TASK.task_name);
//Append vm list to archive
tar_append_file(pTar, "task.xml", "backup.xml");
//Close it
tar_close(pTar);
然后我需要寻找tar,提取一些文件
这是 TAR 的真实内容:
#tar tf /home/backup/ftp_templates.tar
ftp_templates/
ftp_templates/d982d6cc-810a-7582-ddec-2c6b6a9d5530.xva.zlib
ftp_templates/51979771-7362-2061-9043-3606682fa0f3.xva.zlib
ftp_templates/f9e5a919-4aa9-a02d-b1ec-3667ecaa4a5b.xva.zlib
backup.xml
我正在尝试列出里面的文件:
TAR *pTar;
char *tarFilename = "/home/backup/ftp_templates.tar";
tar_open(&pTar, tarFilename, NULL, O_RDONLY | TAR_NOOVERWRITE, 0777, TAR_GNU|TAR_VERBOSE);
while(th_read(pTar)==0)
{
puts(pTar->th_buf.name);
}
tar_close(pTar);
但它只给了
ftp_templates/
ftp_templates/d982d6cc-810a-7582-ddec-2c6b6a9d5530.xva.zlib
如果我尝试提取任何文件
tar_extract_file(pTar,"backup.xml");
它创建一个空文件,大小为 0
提取所有文件效果很好。我只是没有找到任何提取单个文件的例子......
tar -xvf /home/backup/ftp_templates.tar 备份.xml
这也做得很好,所以 tar 本身就可以了..
【问题讨论】:
-
如果单独压缩文件,只会利用每个文件内部的共性;最好将它们全部压缩并使用例如压缩结果压缩包。
-
存档包含约 50 个文件,大小为 10-200GiB。我想一一提取。我无法提取所有 2TiB 只是为了使用 1kB 文本文件
-
检查
errno看是否有错误。详情请见linux.die.net/man/3/tar_extract_file。 -
它没有返回错误。甚至尝试提取不存在的文件会导致创建这样的文件但大小为空