我希望将所有文件和文件夹存档,/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
)。您可以使用破折号 ( -
) 作为文件名来从标准输入读取文件名。