【发布时间】:2020-12-22 03:19:01
【问题描述】:
我正在处理我的 dotfiles 脚本,并正在创建一个 restore.sh 脚本以在全新安装后复制首选项、文件夹等。
我创建了一个检查以查看是否输入了驱动器名称作为参数,如果不使用默认驱动器。但是!...默认驱动器的文件名中有空格。
所以我创建了一个测试脚本来将文件从/Users/tim/My Folder/file.txt 复制到~/Desktop/file.txt
if [[ $# -eq 0 ]];
then
dir="My\ Folder"
else
dir=$1
fi
options=(-a -v -h -W --progress --compress-level=0)
rsync "${options[@]}" "/Users/tim/$dir/file.txt" "~/Desktop/file.txt"
这行不通,所以我一直在玩这个的变体
from="/Users/tim/$dir/file.txt"
to="~/Desktop/file.txt"
options=(-a -v -h -W --progress --compress-level=0 $from $to)
rsync "${options[@]}"
但我不断收到以下错误
rsync: link_stat "/Users/tim/My\ Folder/file.txt" failed: No such file or directory (2)
我一直在阅读这方面的内容,并认为数组是在变量中添加空格的方法,但到目前为止我没有尝试过任何工作。
【问题讨论】:
-
您是否尝试过删除
dir="My\ Folder"中的反斜杠?它不应该在那里。还可以考虑在另一个选项周围添加引号:dir="$1" -
@TedLyngmo 如果我消除强烈反对,我会得到
/Users/tim/Desktop/Folder/file.txt -
如果您删除反斜杠结尾,请执行
echo "$dir"- 您看到了什么? -
"~/Desktop/file.txt"也是错误的。~如果放在引号中,将不会扩展到您的主目录。 -
@TedLyngmo 你说得对,我实际上不需要反斜杠(我刚刚升级到 Big Sur),而你提供的内容已修复。问题是波浪号。添加
${HOME}修复它。如果您愿意,请将其发布为答案,我会将其标记为已解决。谢谢!
标签: bash