收集以.log结尾的所有文件的脚本并创build一个tar.gz文件

我目前正在使用这个脚本行来查找给定的目录结构中的所有日志文件,并将它们复制到另一个可直接压缩的日志文件中。

find . -name "*.log" -exec cp \{\} /tmp/allLogs/ \; 

我有的问题是,目录/子目录信息会丢失,因为我只复制文件。

比如我有:

 ./product/install/install.log ./product/execution/daily.log ./other/conf/blah.log 

最后我得到:

 /tmp/allLogs/install.log /tmp/allLogs/daily.log /tmp/allLogs/blah.log 

我想有:

 /tmp/allLogs/product/install/install.log /tmp/allLogs/product/execution/daily.log /tmp/allLogs/other/conf/blah.log 

什么是复制到另一个目录压缩他们的原因? 下面将创build一个压缩的tar文件closures所有的日志文件,同时保持目录结构在一个步骤(假设它是从根目录运行:

 find . -iname '*.log' -print0 | xargs -0 tar zcf /tmp/test.tar.gz 

例如:

 kbrandt@alpine:~/scrap/tar$ find . *.log . ./foo ./bar ./bar/baz.log kbrandt@alpine:~/scrap/tar$ find . -iname '*.log' -print0 | xargs -0 tar zcf /tmp/test.tar.gz #List files in the archive with the -t switch kbrandt@alpine:~/scrap/tar$ tar -tzf /tmp/test.tar.gz ./bar/baz.log 

尝试在传递模式下使用cpio

find . -name '*.log' | cpio -pdm /tmp/allLogs

 find . -name "*.log" | tar -cz --files-from - -f /path/to/file.tgz