Как я могу tar gz файлы с диапазоном дат имени файла? - PullRequest
0 голосов
/ 25 февраля 2020

Я хочу создать файл tar.gz, который сжимает несколько файлов, отобранных по точному диапазону дат, который составляет имя файлов. например, имена файлов

system.2020-01-21.log
system.2020-01-22.log
system.2020-01-24.log
...

Я хочу установить точный диапазон дат для выбора файлов для сжатия. Выходной файл будет

system.2020-01-20-2020-02-20.log.tar.gz

Я попробовал этот ниже.

LAST_LOG_FILES=`find $LOG_HOME/system*.log -newerBt $LAST_LOG_Y_M_D ! -newerBt $CURR_LOG_Y_M_D`
LOG_ZIP="$LOG_HOME/stage.$LAST_LOG_Y_M_D-$CURR_LOG_Y_M_D.log.tar.gz"
tar -czf $LOG_ZIP $LAST_LOG_FILES

Однако, это выдает ошибку ниже.

tar: Cowardly refusing to create an empty archive. Try `tar --help' or `tar --usage' for more information. 

Я думаю, что это означает Команда не устанавливает диапазон имен файлов, что приводит к пустому архиву.

Если вы знаете лучшую команду для выполнения этой операции, вы бы мне сообщили? Я ценю это заранее.

1 Ответ

2 голосов
/ 25 февраля 2020

Если вы хотите выбрать файл журнала для сжатия на основе имен файлов, вам нужно будет сравнить имена файлов по одному. Не могли бы вы попробовать следующее:

start="2020-01-20"
end="2020-02-20"
log_home="log"          # assign to your LOG_HOME

for f in "$log_home"/system.*.log; do
    base=${f##*/}       # strip leading directory name
    if [[ $base > system.$start.log && $base < system.$end.log || $base = system
.$start.log || $base = system.$end.log ]]; then
                        # if start <= base <= end
        files+=("$f")   # then add the file to the list to compress
    fi
done

if (( ${#files[@]} )); then
                        # if the list of the files is not empty
    log_zip="$log_home/system.$start-$end.log.tar.gz"
    tar -czf "$log_zip" "${files[@]}"
fi
  • Переменная ${#files[@]} представляет количество элементов в массиве files. Проверка условий позволяет избежать случая, когда список пуст.
  • Выражение "${files[@]}" расширяет элементы массива следующим образом: "system.2020-01-21.log" "system.2020-01-22. журнал "...
...