Tar
需要使用萬用字元歸檔文件夾的解決方案,不包括所有 .log 和 .err 文件
我希望將所有文件和文件夾存檔,
/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
)。您可以使用破折號 (-
) 作為文件名來從標準輸入中讀取文件名。