我有一组文件想要
rsync
分布在我的计算机上的多个位置。我正在 WSL 中安装的 Ubuntu 24.04 发行版中运行 bash 脚本。一些源文件和目标文件位置分布在我的 Windows 操作系统以及 Ubuntu 发行版中。
为了加快这一过程,我声明了一个包含目标目录的字符串数组,然后在
for
循环中迭代该数组,尝试 rsync
每个字符串。按照这个示例,我可以很好地echo
目录字符串,甚至可以检查目录是否存在。即使如此,当我尝试对数组中的每个元素进行 rsync
时,我会收到错误
-bash: rsync -urv <source directory> <target directory>: No such file or directory
这是我的 bash 脚本的简化版本:
#!/bin/bash
# define some source and target directories for rsyncing
source_1="/mnt/c/User/username/path/to/source_1"
target_1="/mnt/c/User/username/path/to/target_1"
target_2="/mnt/c/User/username/path/to/target_2"
# declare an array of target destinations
declare -a target_dirs=("$target_1" "$target_2")
rsync_test(){
for i in "${target_dirs[@]}"
do
echo "rsyncing: $i"
if [ -d "$i" ] && [ -d "$source_1"]; then
echo "[ -d $i ] && [ -d $source_1 ] = true!"
"rsync -urv $source_1 $i"
else
echo "[ -d $i ] && [ -d $source_1 ] = false!"
fi
done
}
当我在 shell 中执行函数
rsync_test
时,输出如下:
[ -d /mnt/c/User/username/path/to/target_1 ] && [ -d /mnt/c/User/username/path/to/source_1 ] = true!
-bash: rsync -urv /mnt/c/User/username/path/to/source_1 /mnt/c/User/username/path/to/target_1: No such file or directory
...
<similar output for the other elements of target_dirs>
尽管我们刚刚确认这些目录确实存在!那么为什么
rsync
不认为这些目录存在呢?
提前致谢!
这一行:
"rsync -urv $source_1 $i"
应该是
rsync -urv "$source_1" "$i"
引用整行使其成为一个被视为命令名称的单词。您应该只引用变量。