У меня есть Thinkpad под управлением Linux (Ubuntu 14.04), который находится в проводной сети и Mac работает на Yosemite в беспроводной сети в другой подсети. Они оба работают машинами. У меня также есть 1TB зашифрованный USB-диск Lenovo USB. Я создал следующий сценарий для запуска cron от Thinkpad для синхронизации скрытых папок в/home/greg с внешним накопителем (подключенным к TP), при условии, что он установлен в правый каталог. Затем он должен синхронизировать оставшийся, не скрытый) контент/home/greg и, возможно, выбрать индивидуальные части/etc. Как только это будет сделано, он должен сделать что-то подобное для Mac, сохраняя скрытые файлы отдельно, но делая объединение контента. Мой первый rsync предназначен только для включения скрытых файлов (. * /) В/home/greg, а второй rsync предназначен для захвата всего, что не скрыто в этом каталоге. Далее идет работа.Разнообразные команды rsync в скрипте cron для синхронизации домашних каталогов Ubuntu & Mac
#!/bin/bash
#source
LOCALHOME="/home/greg/"
#target disk
DRIVEBYIDPATH="/dev/disk/by-id"
DRIVEID="disk ID here"
DRIVE=$DRIVEBYIDPATH/$DRIVEID
#mounted target directories
DRIVEMOUNTPOINT="/media/Secure-BU-drive"
THINKPADHIDDENFILES="/TPdot"
MACHIDDENFILES="/MACdot"
BACKUPDIR="/homeBU"
#if test -a $DRIVE ;then echo "-a $?";fi
# Check to see if the drive is showing up in /dev/disk/by-id
function drivePresent {
if test -e $DRIVE
then echo "$DRIVE IS PRESENT!"
driveMounted
else
echo "$DRIVE is NOT PRESENT!"
fi
}
# Check to see if drive is mounted where expected by rsync and if not mount it
function driveMounted {
mountpoint -q $DRIVEMOUNTPOINT
if [[ $? == 0 ]]
then
syncLocal #make sure local has completed before remote starts
#temp disabled syncRemote
else
echo "drive $DRIVEID is PRESENT but NOT MOUNTED. Mounting $DRIVE on $DRIVEMOUNTPOINT"
mount $DRIVE $DRIVEMOUNTPOINT
if [ $? == 0 ]
then
driveMounted
#could add a counter + while/if to limit the retries to say 5?
fi # check mount worked, then re-test until true, at which point the test will follow the other path
fi
}
# Archive THINKPAD to USB encrypted drive
function syncLocal {
echo "drive $DRIVEID is PRESENT and MOUNTED on $DRIVEMOUNTPOINT- now do rsync"
#rsync for all the Linux application specific files (hidden directories)
rsync -ar --delete --update $LOCALHOME/.* $DRIVEMOUNTPOINT/$BACKUPDIR/$THINKPADHIDDENFILES
#rsync for all the content (non-hidden directories)
rsync -ar --delete --exclude-from ./excludeFromRsync.txt $LOCALHOME $DRIVEMOUNTPOINT/$BACKUPDIR
#rsync for Linux /etc dir (includes some custom scripts and cron jobs)
#rsync
}
# Sync MAC to USB encrypted drive
function syncRemote { # Sync Mac to USB encrypted drive
echo "drive $DRIVEID is PRESENT and MOUNTED on $DRIVEMOUNTPOINT- now do rsync"
#rsync for all the Mac application specific files (hidden directories)
rsync -h --progress --stats -r -tgo -p -l -D --update /home/greg/ /media/Secure-BU-drive/
#rsync for all the content (non-hidden directories)
rsync -av --delete --exclude-from ./excludeFromRsync.txt $LOCALHOME $DRIVEMOUNTPOINT/$BACKUPDIR
#rsync for Mac /etc dir (includes some custom scripts and cron jobs)
rsync
}
#This is the program starting
drivePresent
Содержание файла исключения, упомянутых во втором Rsync в syncLocal есть (пь syncRemote отключен на данный момент):
.cache/
/Downloads/
.macromedia/
.kde/cache-North/
.kde/socket-North/
.kde/tmp-North/
.recently-used
.local/share/trash
**/*tmp*/
**/*cache*/
**/*Cache*/
**~
/mnt/*/**
/media/*/**
**/lost+found*/
/var/**
/proc/**
/dev/**
/sys/**
**/*Trash*/
**/*trash*/
**/.gvfs/
/Documents/RTC*
.*
Моя проблема заключается в том, что первый локальный Rsync, что означало быть захват ТОЛЬКО файлы /home/greg/.*, кажется, захватили все или, возможно, потерпели неудачу, и разрешили запуск второго локального rsync, но не исключая файлы /home/greg/.*? Я знаю, что добавил нагрузку, возможно, не относящуюся к делу, но я думал, что это может помочь установить мои ожидания относительно связанных rsyncs. Извините, если я зашел за борт.
Спасибо заранее Грег