На этот вопрос уже есть ответ здесь:
Я хочу создать резервную копию определенного файла в в другую папку каждый раз, когда файл менялся. В идеале резервный файл должен иметь временную метку при резервном копировании. Например:
Рабочий файл каталога
~/workfile
Резервный файл каталога
~/backup/workfile-2014-11-24-10:30
~/backup/workfile-2014-11-24-11:10
~/backup/workfile-2014-11-24-12:40
~/backup/workfile-2014-11-24-15:42
~/backup/workfile-2014-11-24-16:30
Я хотел бы иметь решение без использования графического интерфейса.
Не протестированный, но я приблизился бы к проблеме таким образом:
сценарий:
#!/bin/bash
BACKUP_LOCATION='backup'
FILE_TO_MONITOR='workfile'
PREVIOUS_MD5='000'
if [ ! -d "$BACKUP_LOCATION" ]
then
mkdir -p "$BACKUP_LOCATION"
echo "Init backup dir..."
fi
while true
do
MY_TIMESTAMP=`date +"%Y-%m-%d-%H:%M:%S"`
MY_MD5=`md5sum "$FILE_TO_MONITOR"`
if [ "$MY_MD5" != "$PREVIOUS_MD5" ]
then
cp -f "$FILE_TO_MONITOR" "${BACKUP_LOCATION}/${FILE_TO_MONITOR}-${MY_TIMESTAMP}"
PREVIOUS_MD5=$MY_MD5
echo "File changed at $MY_TIMESTAMP."
fi
done
процедура: выполните этот сценарий как демона. Вывод можно перенаправить его к файлу журнала даже.
Im, не совсем уверенный в том, что вариант использования здесь. Но вместо того, чтобы сделать "резервные копии" файлов согласно определенной метке времени не он лучше только для хранения изменений между версиями?!
, Если you'r файлы не являются двоичными, как текст или исходный код с помощью мерзавец
, если бы они являются двоичными, я использовал бы rsnapshot, поскольку это автоматически создаст параллельную структуру папок с версиями каждого файла, но только хранения копии файлов, которые на самом деле имеют изменения в них (оставление свободного места)
СОХРАНЕНИЕ В ПАПКЕ его согласно времени снимка. например, day2/hour3
, хранящий дату в самом имени файла, кажется избыточным. rsnapshot сохраняет ту информацию и через структуру папок, которую это создает для резервных копий, и можно также видеть его в день самого файла.
МЕРЗАВЕЦ покажет Вам дату фиксации каждого изменения, которое она фиксировала для каждого файла.
По-моему задание зерна является лучшей альтернативой, чем какой-либо бесконечный цикл. Я принимаю ~/backup
, папка уже существует. Можно установить задание зерна для выполнения следующего сценария в интервале n
минуты в зависимости от их потребности. Это будет служить цели.
crontab открытого пользователя (конфигурационный файл крона) от терминала как, crontab -e
. Добавьте, что следующая строка для выполнения сценария в интервале 5 минут,
*/5 * * * * /path/to/script
не забывают давать сценарию разрешение выполнения: chmod u+x /path/to/script
#!/bin/bash
msrc="/home/$USER"
mdst="/home/$USER/backup"
msrcfile="workfile"
mnewfile="$msrcfile"-$(date +"%Y-%m-%d-%H:%M")
checkfile="$(for i in "$mdst"/*; do echo "$i"; done | xargs ls -1t > /dev/null 2>&1 | head -1)"
if [[ "$msrc"/"$msrcfile" -nt "$checkfile" ]]; then
cp "$msrc"/"$msrcfile" "$mdst"/"$mnewfile"
fi
От man bash
:
CONDITIONAL EXPRESSIONS
file1 -nt file2
True if file1 is newer (according to modification date) than file2, or if file1
exists and file2 does not.
От man ls
:
-t sort by modification time, newest first