Script to gather all the files ending in .log and create a tar.gz file

log-filesscriptingunix

I'm currently using this script line to find all the log files from a given directory structure and copy them to another directy where I can easily compress them.

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

The problem I have, is, the directory/subdirectory information gets lost because, I'm copying only the file.

For instance I have:

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

And I end up with:

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

And I would like to have:

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

Best Answer

What is the reason to copy them to another directory to compress them? The following will create a compressed tar file off all the log files while keeping the directory structure in one step (Assuming it is run from the root directory:

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

For example:

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