您好,我正在尝试制作备份脚本,问题是它找不到包含空格的目录。
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 \”失败:没有这样的文件或目录 我想备份目录中也有空格的目录。感谢您的帮助
答案 0 :(得分:3)
您已经知道如何使用数组。您应该更多地使用它们。 :)
rsync -av --delete "${include_paths[@]}" "$DestPath"
"${include_paths[@]}"
(引号是必需的!)将include_paths
数组中的每个元素扩展为单独的rsync
自变量。
根本没有理由生成include_args
。
答案 1 :(得分:0)
这是另一个错误:
"${Desk}/programmering\ skola"
尝试
"${Desk}/programmering skola"
从man bash
中提取双引号:
仅当反斜杠后面跟随以下字符之一时,才保留其特殊含义:$,`,“,\或换行符。