2015-05-10 3 views
0

У меня есть 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. Извините, если я зашел за борт.

Спасибо заранее Грег

ответ

0

Вы должны быть очень осторожны с .*, как он будет тянуть в . и ... Так что это ваш первый Rsync линия:

rsync -ar --delete --update $LOCALHOME/.* $DRIVEMOUNTPOINT/$BACKUPDIR/$THINKPADHIDDENFILES 

Оболочка расширения * и так Rsync видит . и .., и он будет идти полным рекурсивный на этих двух!

Мне интересно, может ли это помочь: --exclude . --exclude .. Ну, я уверен, вы знаете об использовании -vn, чтобы помочь вам отладить проблемы rsync.

 Смежные вопросы

  • Нет связанных вопросов^_^