脚本用于收集所有以 .log 结尾的文件并创建 tar.gz 文件

脚本用于收集所有以 .log 结尾的文件并创建 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

答案1

将它们复制到另一个目录以进行压缩的原因是什么? 以下命令将创建一个压缩的 tar 文件,其中包含所有日志文件,同时保持目录结构不变(假设它是从根目录运行的:

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

答案2

尝试使用太平洋保险协会处于直通模式

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

答案3

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

答案4

那么如何仅将日志过滤到存档中呢:

sudo tar -zcvf archive.tar.gz /path/**/*.log

相关内容