【发布时间】:2022-11-24 00:46:43
【问题描述】:
我对此很陌生,所以我很感激每一个新的提示。我是脚本编写的新手,我想我刚刚获得知识,所以我需要帮助。
我遇到以下情况:
我有一个 Windows 服务器和一个 Oracle Linux 服务器。 Windows Server 有几个目录,里面有一些文件。现在的目标是将文件从每个目录传输到 Linux 服务器上的特定目录中。我想使用 bash 脚本(是的,在 Windows github 上使用 bash 脚本,带有任务调度程序)自动执行此过程。
剧本:
#Files im Ordner des lokalen Servers
array=(
/c/Users/adbls/Documents/HR/*
/c/Users/adbls/Documents/Abschluss/*
/c/Users/adbls/Documents/GL/*
)
#Pfad zu Ordner auf Zielserver
array2=(
/home/sara.blatter/HR/
/home/sara.blatter/Abschluss/
/home/sara.blatter/GL/
)
for index in ${!array[*]}; do
scp "${array[$index]}" $User@$remoteHost:"${array2[$index]}"
# rm "${array[$index]}"
done
现在作为一个例子,如果目录“Abschluss”有两个文件,目标路径数组显然不会循环目标路径数组两次,它最终导致文件位于 linux 服务器上的错误目录中.我知道 scp -r 可以用我的通配符解决问题,但我不想复制目标目录中的目录。
我希望你明白我的问题;处理这个问题的最佳方法是什么?
【问题讨论】:
-
你不能用
rsync代替scp吗? -
谢谢你的评论,我也有同样的想法!但由于我在 Windows git-bash 上工作,它不支持“rsync”。或者你现在如何将其作为模块导入?
-
数组之间路径的名称相似性是偶然的还是系统的?在后一种情况下,我将遍历
array2而不是array1,并在scp命令中执行 globbing (*)。另外,我不会遍历数组指标,而是数组元素。此外,您目前的名称引用表达式${!array[*]}没有意义。你有没有试过用set -x运行你的脚本? -
另一种可能性是使用 Cygwin 而不是 git-bash,然后使用
rsync来完成。这就是我正在使用的。