Я сбит с толку.У меня есть скрипт резервного копирования Linux, который я использовал, когда использовал Linux в качестве основной ОС.Теперь, когда я перешел на Windows, я хочу продолжать использовать его под Cygwin.Я перенес это, но вижу специфическую проблему.
Как вы увидите из кода ниже, в основном я создаю структуру папок / device / backups / machinename /.Я обобщил его, чтобы он определял имя машины через hostname
.Если структура папок не существует, она создает ее.Что я вижу, так это то, что скрипт обычно работает, но иногда ему нравится создавать папку с повторяющимся именем машины с нечетным квадратным символом после него.Этот символ отображается как знак вопроса в Cygwin.Итак, я бы увидел: / устройство / резервные копии / имя машины и / устройство / резервные копии / имя машины?в то же время.Cygwin, кажется, запутался между этими двумя папками, иногда копируя в первую, а иногда во вторую.Он также не создает эту папку последовательно, но если я позволю вещам запускаться каждый день в течение недели, она будет отображаться.
Также обратите внимание, что она предназначена для запуска для каждой папки, имена папок передаются вв качестве аргументов.Сохраняет неделю архивов в формате FolderName.0.tar.gz, FolderName.1.tar.gz и т. Д.
Сейчас я попытаюсь обойти это, жестко запрограммировав имя машины.Но мне действительно интересно выяснить, в чем проблема.Вот источник моего сценария:
#!/bin/bash
#Backup Docs
for FOLDER in $@
do
# Location of folder to be backed up
FOLDERLOCATION="/home/sean"
# Mount point of the backup device
DEVICE="/cygdrive/f"
# Hostname of the machine being backed up
HOSTNAME=`hostname`
# NOTE: when I originally posted this question, the above line read:
# HOSTNAME=`txtmsgbreakup`
# which doesn't make any sense. I failed at changing the hard-coded solution back
# to the original command that produces the string "txtmsgbreakup" (my system's name)
BACKUPFOLDER="$FOLDERLOCATION/$FOLDER/"
BACKUPDEST="$DEVICE/backups/$HOSTNAME/$FOLDER/"
# Check to see if device is mounted
if [ -d $DEVICE ]
then
# Create directory if necessary
if [ ! -d $BACKUPDEST ]; then
mkdir -p $BACKUPDEST
fi
# Capture before time for logging
before=$(date +%s)
# First, tar up the old into file named after day of week
DOW=`date +%w`
FILENAME="$DEVICE/backups/$HOSTNAME/$FOLDER.$(( ($DOW+6)%7 )).tar.gz"
if [ -e $FILENAME ]; then
rm $FILENAME
fi
tar -czPf $FILENAME $BACKUPDEST
# Now perform the backup
rsync -a --del --ignore-errors $BACKUPFOLDER $BACKUPDEST
after=$(date +%s)
# Calculate how long the backup took
elapsed_seconds=$(($after-$before))
es=$((elapsed_seconds % 60))
em=$(( (elapsed_seconds / 60) % 60 ))
eh=$((elapsed_seconds / 3600 ))
# Write it all to the system log
echo "$(date) - $BACKUPFOLDER backed up. Elapsed time: $(printf '%02d:%02d:%02d' $eh $em $es)" >> /var/log/backup
else
#External is not mounted if this branch is executed, log this.
echo "$(date) - $BACKUPFOLDER not backed up: Backup device not mounted." >> /var/log/backup
fi
done