Назад | Перейти на главную страницу

Скрипт для сбора всех файлов, заканчивающихся на .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

В чем причина их копирования в другой каталог для их сжатия? Следующее создаст сжатый 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