如何解决选择性解压,省略现有的绝对文件夹结构,tar 到一个目录
假设 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 answer 作为问题的答案。如果可能,仍然对非 Docker 相关的答案感兴趣。
解决方法
我能够将已经定义的(通过 docker-compose.yml)卷 my-volume
重新挂载到 my-service
的 docker-compose run,但在这种情况下映射到第二个容器化目录, tar 将输出其内容的位置。
例如
gunzip -c example.tar.gz | docker-compose run --rm -v my-volume:/volumes/wordpress my-service tar -C / -xf - volumes/wordpress
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。