Выполнение следующей команды работает должным образом:
find /path/to/logs/ \( -type f -name '*20161005.log' \) -print0 | tar -czvf /path/to/backups/backup_logs_20161005.tar.gz --null -T -
Но, пытаясь использовать это в сценарии bash, я получаю пустой .tar.gz
файл:
#!/bin/bash
now="$(date)"
printf "Current date and time: $now"
## working paths
LOGSPATH="/path/to/logs/"
BACKPATH="/path/to/backups/"
## date to work with
DATETIME=`date -d "yesterday 13:00 " '+%Y%m%d'`
## find files matching the working date and .tar.gz the result
printf "\nStarting yesterday logs backup, please wait..."
find "$LOGSPATH" \( -type f -name '*"$DATETIME".log' \) -print0 | tar -czvf "$BACKPATH"backup_logs_"$DATETIME".tar.gz --null -T -
printf "\ndone!"
## delete backup files
printf "\nRemoving logs from yesterday..."
find "$LOGSPATH" -type f -name '*"$DATETIME".log' -delete
printf "\ndone!\n"
Вывод:
Текущая дата и время: Вт, 6 октября, 16:14:29 WEST 2016
Запуск вчерашнего резервного копирования журналов, подождите ...
сделано!
Удаление журналов со вчерашнего дня ...
сделано!
Что мне не хватает при размещении этой команды в сценарии bash?
Заменить
-name '*"$DATETIME".log'
с участием
-name "*$DATETIME.log"
Одиночные кавычки очень сильны, двойные кавычки позволяют использовать $ VARIABLE внутри.