在 bash 中迭代 for 循环时找不到文件/目录

问题描述 投票:0回答:1

我有一组文件想要

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
不认为这些目录存在呢?

提前致谢!

bash for-loop windows-subsystem-for-linux rsync
1个回答
0
投票

这一行:

    "rsync -urv $source_1 $i"    

应该是

    rsync -urv "$source_1" "$i"    

引用整行使其成为一个被视为命令名称的单词。您应该只引用变量。

© www.soinside.com 2019 - 2024. All rights reserved.