【问题标题】:How do I tar a directory without retaining the directory structure?如何在不保留目录结构的情况下 tar 目录?
【发布时间】:2011-08-07 10:36:41
【问题描述】:

我正在编写一个备份脚本,并且想要压缩一个文件目录:

tar czf ~/backup.tgz /home/username/drupal/sites/default/files

这会将其解压缩,但是当我解压缩生成的文件时,它包含完整的文件结构:文件位于 home/username/drupal/sites/default/files

有没有办法排除父目录,以便生成的 tar 只知道最后一个目录 (files)?

【问题讨论】:

    标签: linux unix gnu tar


    【解决方案1】:
    cd /home/username/drupal/sites/default/files
    tar czf ~/backup.tgz *
    

    【讨论】:

    • 也可以使用tar的-C选项。
    • cd 不被推荐并且容易出错,例如大脚本或生成文件。下面的答案更普遍可用和正确。
    • 在 Ubuntu 16.04 上尝试 -C--directory 对我不起作用。这是唯一有效的选项。
    • 这是唯一有效的选项 -C 添加 .根文件夹,这不是我们想要的。
    【解决方案2】:

    使用 --directory 选项:

     tar czf ~/backup.tgz --directory=/home/username/drupal/sites/default files 
    

    【讨论】:

    • 如果我想在这里放2个目录怎么办?
    • @user3352668 只需添加两个目录。例如。如果默认包含“files”和“morefiles”,只需将“morefiles”添加到 nbt 的字符串中。顺便说一句:最好的解决方案是 nbt,应该是公认的答案
    • -C DIR--directory=DIR 相同,将目录更改为 DIR
    • 只是想我会提到这里的顺序很重要。您不能在目标 ~/backup.tgz 前面加上 --directory="/home/username/drupal/sites/default files"
    • @ChrisStryczynski 注意--directory 选项给出的路径不是"/home/username/drupal/sites/default files"。它是/home/username/drupal/sites/default,后跟一个位置参数,指定要压缩的目录的名称files
    【解决方案3】:
    tar -Cczf ~/backup.tgz /home/username/drupal/sites/default/files
    

    -C 为你做 cd

    【讨论】:

    • 这行不通。查看 MaikoID 和 Neil Butterworth 的解决方案。
    • -C 有效,但必须像 -C <dir> file1 file2 ... 一样使用
    【解决方案4】:

    你好我有一个更好的解决方案,当进入指定目录时这是不可能的(Makefiles等)

    tar -cjvf files.tar.bz2 -C directory/contents/to/be/compressed .
    

    不要忘记末尾的点 (.) !!

    【讨论】:

    • 最后的点有什么作用?
    • @BruceSun -C 改变你的工作目录。点告诉 tar 你要归档哪个目录(即当前工作目录)。
    • 如果省略最后的点,您可能会收到警告:tar: Cowardly refusing to create an empty archive
    • 每个人都在谈论 -C 选项或 --directory 但没有小 '.'最后正如@MaikolD 提到的那样,它不起作用 - 至少在我的环境中。
    • 这仍然会在 tar 的根目录中留下一个 . 文件夹
    【解决方案5】:

    /home/myuser/workspace/zip_from/ 压缩所有 txt (*.txt) 文件 到/home/myuser/workspace/zip_to/ 没有源文件的目录结构使用以下命令:

    tar -P -cvzf /home/myuser/workspace/zip_to/mydoc.tar.gz  --directory="/home/myuser/workspace/zip_from/" *.txt
    

    【讨论】:

      【解决方案6】:

      这对我有用:

      gzip -dc "<your_file>.tgz" | tar x -C <location>
      

      【讨论】:

        【解决方案7】:

        对我来说 -C 或 --directory 不起作用,我使用这个

        cd source/directory/or/file
        tar -cvzf destination/packaged-app.tgz *.jar
        # this will put your current directory to what it previously was
        cd -
        

        【讨论】:

          【解决方案8】:

          创建一个 tar 存档

          tar czf  $sourcedir/$backup_dir.tar --directory=$sourcedir WEB-INF en
          

          在本地机器上解压缩文件

          tar -xvf $deploydir/med365/$backup_dir.tar -C $deploydir/med365/
          

          上传到服务器

          scp -r -i $privatekey $sourcedir/$backup_dir.tar $server:$deploydir/med365/
          echo "File uploaded.. deployment folders"
          

          在服务器上解压

          ssh -i $privatekey $server tar -xvf $deploydir/med365/$backup_dir.tar -C $deploydir/med365/
          

          【讨论】:

            【解决方案9】:

            请使用以下命令生成没有目录结构的 tar 文件

            tar -C <directoryPath> -cvzf <Path of the tar.gz file> filename1 filename2... filename N
            

            例如:

            tar -C /home/project/files -cvzf /home/project/files/test.tar.gz text1.txt text2.txt
            

            【讨论】:

              猜你喜欢
              • 2019-05-30
              • 1970-01-01
              • 2023-03-22
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-01-15
              • 2012-03-02
              相关资源
              最近更新 更多