Как архивировать файлы на основе имени файла? - PullRequest
0 голосов
/ 12 апреля 2020

В /var/log есть несколько файлов, как показано ниже:

cron
cron-20200322
maillog-20200329
tallylog
bootscan.log
bootscan.log-20200115.gz
bootscan.log-20200116.gz

Я хочу сделать резервную копию файлов: cron;cron-20200322;bootscan.log;bootscan.log-20200115.gz;bootscan.log-20200116.gz в отдельный файл /mnt/log_backup.tar
Затем, Я вижу bash сценарий оболочки, как показано ниже:

#!/bin/bash
backup_dir='/mnt'
tar -cpf $backup_dir/log_backup.tar -C /var/log cron*
tar -cpfr $backup_dir/log_backup.tar -C /var/log boot*

К сожалению, я получил ошибку, как показано ниже:

tar: cron*: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors
tar: Removing leading `/' from member names
tar: boot*: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors

В чем проблема в моем сценарии оболочки?

Ответы [ 2 ]

0 голосов
/ 12 апреля 2020
find . /var/log -maxdepth 1 -type f -name "boot*" -print0 | tar -cpf  $backup_dir/log_backup.tar --null -T -
find . /var/log -maxdepth 1 -type f -name "cron*" -print0 | tar -rpf  $backup_dir/log_backup.tar --null -T -

Я думаю, что это правильный ответ, может быть, не самый лучший.
Просьба дать вам 2 цента, если есть лучшее решение, спасибо!

0 голосов
/ 12 апреля 2020

Подстановка * оценивается перед изменением папки на /var/log.

Проверка Как заставить работать подстановку tar с опцией 'change directory'

...