Tar

需要使用萬用字元歸檔文件夾的解決方案,不包括所有 .log 和 .err 文件

  • July 20, 2020

我希望將所有文件和文件夾存檔,/app/jboss同時排除所有*.log.err*文件。下的目錄結構/app/jboss過於龐大和復雜。

因此,應排除以下幾個範例文件。

/app/jboss/standalone/server4/server1.log 
/app/jboss/standalone/server7/server1.log_bkp
/app/jboss/audir/diag.log
/app/jboss/standalone/server7/server1.err.gz
/app/jboss/standalone/version1.err
.... etc

如果可能,我希望我的解決方案能夠在 AiX、Solaris 和 Linux 上執行。否則,每個人都有不同的解決方案。

對我來說最好的壓縮.gz是我喜歡的。

在下面嘗試了 Johan 的解決方案,但它似乎不起作用。

[root@myhost moht_bkp]# find /app/jboss -not -name "*.log*" | cpio -o | gzip > /app/moht_bkp/test.gz
1360843 blocks 

[root@myhost moht_bkp]# echo $? 0  

[root@myhost moht_bkp]# ls -ltr 
total 
1097768 -rw-r--r-- 1 root      root      562056007 Jul 20 10:45 test.gz   

[root@myhost moht_bkp]# gunzip test.gz 

[root@myhost moht_bkp]# ls -ltr total 680424 -rw-r--r-- 1 root root 696751616 Jul 20 16:34 test

您可以結合使用 find、cpio 和 gzip 來實現此目的。複製模式下的 Cpio 從標準輸入獲取文件列表並在標準輸出上創建存檔。存檔可以傳遞給 gzip 進行壓縮。

以下範例查找除副檔名為 .err 和 .log 的文件之外的所有文件,並將文件列表傳遞給 cpio,cpio 又將存檔傳遞給 gzip。最後,壓縮檔案被重定向到一個文件。

find app/jboss -not -name "*.err" -not -name "*.log" | cpio -o | gzip > /tmp/backup.gz

要從存檔中提取文件,請將 gzip 文件解壓縮到標準輸出,以輸入模式將其通過管道傳輸到 cpio:

zcat /tmp/backup.gz | cpio -i

Cpio 支持不同的存檔格式,如果您希望輸出在所有平台上兼容,您可能需要研究不同的格式選項。

GNU 版本的 tar 程序有一個類似的選項-T( --files-from=FILE)。您可以使用破折號 ( -) 作為文件名來從標準輸入中讀取文件名。

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