bash rsync не может найти каталог с пробелами - PullRequest
0 голосов
/ 16 марта 2019

Здравствуйте, я пытаюсь создать резервный скрипт, и проблема в том, что он не может найти каталог, в котором есть пробелы.

Код для скрипта bash.

#!/bin/bash

Desk="/Users/elev/Desktop/"

include_paths=(
    "${Desk}/Skola"
    "${Desk}/music"
    "${Desk}/jobb"
    # not working directory
    "${Desk}/programmering\ skola"

)

# ${include_paths[@]} means every value in the list
for item in "${include_paths[@]}"
do
    include_args="${include_args} ${item}"

done

DestPath="/Volumes/Atheer/backup"

rsync -av --delete ${include_args} $DestPath

Как вы можете видеть, я пытался использовать обратную косую черту и пробел, но это не работает. Я получаю следующий код ошибки rsync: link_stat "/ Users / elev / Desktop / programmering \" не удалось: нет такого файла или каталога Я хотел бы, чтобы резервные копии каталогов, в которых тоже есть пробелы Я ценю помощь

Ответы [ 2 ]

3 голосов
/ 16 марта 2019

Вы уже знаете, как использовать массивы.Вы должны использовать их больше.:)

rsync -av --delete "${include_paths[@]}" "$DestPath"

"${include_paths[@]}" (кавычки необходимы!) Расширяет каждый элемент в массиве include_paths до отдельного аргумента rsync.

Нет причин для генерации include_args на всех.

0 голосов
/ 16 марта 2019

Вот еще одна ошибка:

 "${Desk}/programmering\ skola"

Попробуйте

 "${Desk}/programmering skola"

извлечение из man bash для двойных кавычек:

Обратная косая черта сохраняет свое специальное значение, только если за ней следует один из следующих символов: $, `,", \ или newline.

...