【问题标题】:Unable to create tar file of files from specific folder . Getting wrong path after extraction无法从特定文件夹创建文件的 tar 文件。提取后路径错误
【发布时间】:2021-01-31 17:53:50
【问题描述】:

这里我只想创建 bin 文件夹的 tar 文件。我的 main.c 代码有位置,即 /home/amit/practice/datafill/main.c。 datafill 目录包含 bin、conf、config、data、lib 等文件夹。

有一个链接system("cd <path>") in a C program 但这并不能解决我的问题。通过将 2 个命令与 && 运算符结合使用,它仅从 bin 文件夹创建 bin.tar,但是当它被提取时,它包含完整路径链接 /home/amit/practice/datafill/bin/这是错误的。假设bin文件夹中有一个文件abc.txt。所以提取后,abc.txt 的路径应该只有 bin/abc.txt,而不是 /home/amit/practice/datafill/bin/abc.txt

#include<stdio.h>
#include<unistd.h>
int main(void)
{
char Cmd[256];
/*Go to specific directory && create tar file*/
sprintf(Cmd,"cd /home/amit/practice/datafill/bin/ && sudo tar -cvf bin.tar *");
system(Cmd);
return 0;
}

【问题讨论】:

    标签: c system


    【解决方案1】:

    您的代码在 bin 目录中创建了 tar 文件,但您似乎检查了当前目录中的旧尝试。

    这段代码很奇怪而且不自然。我通常会这样做:

     `cd /home/amit/practice/datafill/bin/ && sudo tar -cvf - *`
    

    这会导致 tarball 被写入程序的标准输出。如果要生成到特定的路径,这样会更合理

     `sudo sh -c '(cd /home/amit/practice/datafill/bin/ && tar -cvf - *) > bin.tar'`
    

    【讨论】:

    • 它工作正常但是 tar -cvf - * part 是什么意思,假设在 bin 文件夹中有一个名为 abc.txt 的文件。在创建 tar 文件时可以从 bin 文件夹中排除该文件吗? .在这个命令中需要做哪些改变。 ?
    • @user3559780:有很多方法,但我建议放弃 system API 并为如此复杂的工作设计更健壮的东西。
    • 很好,但是 tar -cvf - * 部分是什么意思? .因为这与例如普通命令不同。 tar -cvf bin.tar bin
    • @user3559780: - 文件名所在的位置表示标准输入/标准输出。在这种情况下,标准输出。所以我们重定向到 cd 之外。
    • 你有任何链接或文件可以让我获得更多信息吗?我正在互联网上搜索它。但还没有找到它
    猜你喜欢
    • 2021-12-20
    • 2016-10-02
    • 1970-01-01
    • 2019-05-17
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多