【问题标题】:Selective decompression, ommitting the existing absolute folder structure, of tar to a directory选择性解压,省略现有的绝对文件夹结构,tar到一个目录
【发布时间】:2021-06-03 12:45:13
【问题描述】:

假设example.tar.gz 存档包含以下内容:

volumes/wordpress/a
volumes/wordpress/.b
volumes/wordpress/c/d
volumes/service2/a
volumes/service2/.b
volumes/service3/c/d
volumes/service3/a
volumes/service3/.b
volumes/service3/c/d

我想把存档的volumes/wordpress的内容解压到主机上的/var/www/html目录下(已经存在,无法删除),最终得到:

/var/www/html/a
/var/www/html/.b
/var/www/html/c/d

我无法重新格式化 tar 文件。

我尝试过的:

  • gunzip -c example.tar.gz | tar -C /var/www/html -xf - volumes/wordpress

    但这会创建/var/www/html/volumes/wordpress/...

  • gunzip -c example.tar.gz | bash -c 'tar -C /tmp -xf - volumes/wordpress && mv /tmp/volumes/wordpress/* /var/www/html'

    但这会跳过.b 文件

  • gunzip -c example.tar.gz | bash -c 'tar -C /tmp -xf - volumes/wordpress && rsync -a --remove-source-files /tmp/volumes/wordpress/ /var/www/html/'

    但是 rsync 在 docker 容器的上下文中不存在

注意,因为我认为这与这个问题无关,所以我跳过了 Docker 相关的细节,但如果有用,我正在运行的命令是这种格式:

  • gunzip ... | docker-compose run --rm wordpress tar ... 这允许在 docker-compose yml 中定义 wordpress 容器(因此我声明我不能删除 /var/www/html/,因为它是作为卷安装的)

编辑 事实证明,我最终找到了一个令人满意的(虽然 hacky)解决方案来解决我的问题,而且它是 Docker 特定的(因此编辑问题以包含 Docker 标记)。我将提供 hacky 答案作为问题的答案。如果可能的话,仍然对非 Docker 相关的答案感兴趣。

【问题讨论】:

    标签: linux docker gzip tar


    【解决方案1】:

    我能够将已经定义的(由 docker-compose.yml)卷 my-volume 重新挂载到 my-service 的 docker-compose 运行中,但在这种情况下映射到第二个容器化目录,其中 tar 将输出它的内容。

    例如

    gunzip -c example.tar.gz | docker-compose run --rm -v my-volume:/volumes/wordpress my-service tar -C / -xf - volumes/wordpress

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-11
      • 1970-01-01
      • 2011-03-21
      相关资源
      最近更新 更多