Find

如何使用 cpio 將壓縮的 tar 提取到特定目錄位置

  • August 18, 2020

我使用以下命令創建了壓縮的 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文件?

第一個命令創建一個cpio具有絕對文件名的壓縮格式存檔。這意味著當您提取文件時,它們將被放置在那些絕對位置

請注意,cpio -o寫入cpio-format 存檔,而不是 -format 存檔tar。您應該使用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

甚至tar直接使用 GNU,如果你有的話

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

引用自:https://unix.stackexchange.com/questions/605068