如何使用 cpio 将压缩的 tar 提取到特定目录位置

如何使用 cpio 将压缩的 tar 提取到特定目录位置

我使用以下命令创建了压缩的 tar 文件。

find /app/jboss -not -name "*.err" -not -name "*.log" | cpio -o | gzip >/app/patchbkp/test/REDHAT_jboss-eap-7.2_18-Aug-2020.tar.gz

我在这里得到了压缩文件

[user1@myhost test]$ ls -ltr /app/patchbkp/test/REDHAT_jboss-eap-7.2_18-Aug-2020.tar.gz
-rwxrwxr-x 1 user1 mygrp 363997224 Aug 18 16:08 /app/patchbkp/test/REDHAT_jboss-eap-7.2_18-Aug-2020.tar.gz

我想提取/app/jboss下面的目录,/app/patchbkp/test这样我就得到了/app/patchbkp/test/app/jboss/.......;因此我尝试以下命令。

cd /app/patchbkp/test/
zcat /app/patchbkp/test/REDHAT_jboss-eap-7.2_18-Aug-2020.tar.gz | cpio -i

但这不会生成任何文件/app/patchbkp/test

当我尝试时出现权限被拒绝错误gunzip /app/patchbkp/test/REDHAT_jboss-eap-7.2_18-Aug-2020.tar.gz

您能指导我如何解压目录/app/jboss下的tar 压缩包吗?/app/patchbkp/test

答案1

第一个命令创建cpio具有绝对文件名的压缩格式存档。这意味着当您提取文件时,它们将被放置在这些绝对位置

请注意,cpio -o写入的是cpio-format 存档,而不是tar-format 存档。您应该使用cpio -o -H tar-formattar文件。

您的提取命令将起作用,但只能将文件写入文件系统上的绝对位置。您可以通过首先列出带有-t标志的文件来查看会发生什么

zcat /app/patchbkp/test/REDHAT_jboss-eap-7.2_18-Aug-2020.tar.gz | cpio -it

我会推荐你​​的命令的这些变体

( cd / && find app/jboss -not -name "*.err" -not -name "*.log" | cpio -o -H tar ) | gzip >/app/patchbkp/test/REDHAT_jboss-eap-7.2_18-Aug-2020.tar.gz

或者甚至直接使用 GNU(tar如果有的话)

tar -C / -f /app/patchbkp/test/REDHAT_jboss-eap-7.2_18-Aug-2020.tar.gz -cv --exclude '*.log' --exclude '*.err' app/jboss

相关内容