需要解决方案来归档使用通配符排除所有 .log 和 .err 文件的文件夹

需要解决方案来归档使用通配符排除所有 .log 和 .err 文件的文件夹

我希望将所有文件和文件夹存档,/app/jboss同时排除所有文件和文件夹。日志。呃文件。下面的目录结构/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是我更喜欢的。

尝试了下面约翰的解决方案,但它似乎不起作用。

[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

答案1

您可以结合使用 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)。您可以使用破折号 ( -) 作为文件名来从标准输入读取文件名。

相关内容