scripts/xymon/tar.client.logfiles.sh

66 lines
2.2 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/sh
# Purpose:
# Create an XZ archive of all files between 2 dates.
# Then remove these files
# Call this script from an /var/lib/xymon/hostdata subdirectory or
# /var/lib/xymon/histlogs subdirectory.
# Vars {{{
## Enable (0) or disable (1) debug
debug=0
## Colors {{{
c_redb='\033[1;31m'
c_magentab='\033[1;35m'
c_reset='\033[0m'
## }}}
## Manage files of year
date_year="2019"
## Compress files between these dates
date_start="${date_year}-01-01 00:00:01"
date_end="${date_year}-12-31 23:59:59"
## Best XZ compression level
xz_compression_lvl="-9"
## Fatest XZ compression level
#xz_compression_lvl="-0"
## Get current directory name
current_dir=${PWD##*/}
## Count the number of files
match_files=$(find . -type f -newermt "${date_start}" -not -newermt "${date_end}" -not -iname "*.tar*" | wc -l)
## Archive name
tar_file_name="${date_year}.${current_dir}${xz_compression_lvl}.tar.xz"
# }}}
# If archive already exists
if [ -s "${tar_file_name}" ]; then
printf "${c_redb}%-6b${c_reset}\n" "ERROR: ${tar_file_name} already exists (also ${match_files} files match the expected pattern). Please manage this directory manually or remove the archive or files then restart."
exit 1
fi
# If some files match
if [ ! ${match_files} -eq "0" ]; then
[ "${debug}" -eq "0" ] && printf "${c_magentab}%-6b${c_reset}\n" "DEBUG: Create an archive for ${current_dir} files between ${date_start} and ${date_end} (${match_files} files) using XZ's compression level: ${xz_compression_lvl}."
## Get the list of files between the 2 dates and ignore tar files
find . -type f -newermt "${date_start}" -not -newermt "${date_end}" -not -iname "*.tar*" -print0 | tar cJf "${tar_file_name}" --null -T -
## Check previous return code and if the archive exists with size > 0
if [ "${?}" -eq "0" ] && [ -s "${tar_file_name}" ]; then
[ "${debug}" -eq "0" ] && printf "${c_magentab}%-6b${c_reset}\n" "DEBUG: ${tar_file_name} successfully created, the files can be deleted."
find . -type f -newermt "${date_start}" -not -newermt "${date_end}" -not -iname "*.tar*" -delete
fi
else
[ "${debug}" -eq "0" ] && printf "${c_magentab}%-6b${c_reset}\n" "DEBUG: Skip ${current_dir}, no files found between ${date_start} and ${date_end}."
fi
exit 0