Bash в Cygwin создает папку с неизвестным персонажем - PullRequest
1 голос
/ 20 ноября 2011

Я сбит с толку.У меня есть скрипт резервного копирования 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

1 Ответ

0 голосов
/ 20 ноября 2011

Вы должны удалить HOSTNAME= txtmsgbreakup

Если вы хотите поместить строку, попробуйте: HOSTNAME = "txtmsgbreakup" или, если вы хотите динамическое имя хоста, переменную $ HOSTNAME уже находится в вашей среде.

В моем понимании вашей проблемы вы бы хотели определить HOSTNAME со строкой "txtmsgbreakup", но пока вы помещаете ее в обратные галочки `, вы просите запустить команду, которая не существует.

Более того, используйте больше кавычек в переменных оболочки, чтобы избежать поломок (когда-нибудь)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...