1

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 backup.xml

これもうまくいったので、tar自体はOK..

4

2 に答える 2

1

それが私がやった方法です。正常に動作しますが、私にはあまり明白ではありませんでした

TAR *pTar;  
int i=0;
tar_open(&pTar, xva_filename, 0, O_RDONLY, 0, 0);
while ((i = th_read(pTar)) == 0)
{
    //th_print_long_ls(pTar);
    //th_print(pTar);
    if(strcmp(pTar->th_buf.name,"ova.xml")==0)
    {
        puts(pTar->th_buf.name);
        tar_extract_regfile(pTar,pTar->th_buf.name);
    }


    if (TH_ISREG(pTar) && tar_skip_regfile(pTar) != 0)
    {
        fprintf(stderr, "tar_skip_regfile(): %s\n",
            strerror(errno));
        return;
    }
}
于 2013-02-03T11:30:55.250 に答える