我尝试编写一个 bash 脚本,用于将数据从一个文件夹复制到另一个文件夹。
Source="/My Images/"
Target=/Transfer/Media/
rsync -avu --progress $Source $Target
问题是,脚本找不到文件夹“/My Images/”,因为这两个单词之间有一个空格。
我如何告诉变量 Source 接受这个文件夹名称?
答案1
我如何告诉变量 Source 接受这个文件夹名称?
它没有分配该参数:
Source="/My Images/"
而是它的扩展:
rsync -avu --progress $Source $Target
看起来您已经知道,引用路径/字符串"/My Images/"
对于处理其中的空格是必要的。
您还需要在命令中使用它时引用包含它的参数/变量,以防止 shell 进行分词,如下所示:
rsync -avu --progress "$Source" "$Target"
您应该养成在脚本中用双引号括住所有参数的习惯。
我假设您在同一台机器上本地使用rsync
,但如果您使用它将文件同步到远程机器ssh
,那么您可能需要双引号/转义...例如,参见:使用 scp 复制包含空格的远程文件需要双空格转义。为什么?