В настоящее время я использую эту строку сценария, чтобы найти все файлы журнала из данной структуры каталогов и скопировать их в другой каталог, где я могу легко их сжать.
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
В чем причина их копирования в другой каталог для их сжатия? Следующее создаст сжатый 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
find . -name "*.log" | tar -cz --files-from - -f /path/to/file.tgz
Попробуйте использовать cpio в сквозном режиме
find . -name '*.log' | cpio -pdm /tmp/allLogs
А как насчет фильтрации только логов в архив:
sudo tar -zcvf archive.tar.gz /path/**/*.log