#!/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