@ John1024 уже дал вам хороший ответ , но я подумал, что добавлю еще немного.
В некоторых случаях может потребоваться добавить файлы в существующий tar
архив . Например, у вас есть архив файлов журнала на каждый месяц, и вы хотите добавлять файлы дневного журнала в этот архив каждую ночь после ротации файлов журнала, которая может произойти в полночь.
Если ваш архив называется /data/logs/logfiles-2016-08.tar
для августа, а сами ротационные файлы журналов на определенную дату называются / var / log / servicename-2016-08-06.log
(для ряда различных значений servicename
) у вас может быть небольшой сценарий, который задание cron вызывает в 3 часа ночи, которое выполняет
#!/bin/sh
yyyymm="$( date --date="1 day ago" +"%Y-%m" )"
yyyymmdd="$( date --date="1 day ago" +"%Y-%m-%d" )"
for logfile in /var/log/*-$yyyymmdd.log; do
tar -r -C /var/log -f "/data/logs/logfiles-$yyyymm.tar" "${logfile##*/}" &&
rm "${logfile##*/}"
done
Флаг -r
указывает tar
добавлять записи в архив. Флаг -C
используется для указания tar
изменить каталог на / var / log
перед доступом к файлам журнала. Флаг -f
указывает расположение архива. $ {logfile ## * /}
будет расширен до базового имени (имени файла без пути) файла журнала (его можно заменить на $ (базовое имя «$ logfile»)
) .
В начале каждого месяца вы можете сжимать архив файлов журнала за предыдущий месяц с помощью
#!/bin/sh
yyyymm="$( date --date="1 month ago" +"%Y-%m" )"
gzip --best "/data/logs/logfiles-$yyyymm.tar"
. Это немного сложнее, чем просто выполнять
cd /var/log &&
tar -c -z -f /data/logs/logfiles-2016-08.tar.gz *-2016-08-??.log &&
rm *-2016-08-??.log
один раз в месяц, но тем не менее могут быть причины для этого. .
Примечание: файл может быть добавлен в архив с помощью tar -r
, но архив не может быть сжатым архивом в то время (GNU tar
] может это поддержать). Если архива не существует, он будет создан. Также обратите внимание, что для моих примеров выше требуется дата GNU
.