gpt4 book ai didi

Bash——文件名中的 Rsync 变量有空格

转载 作者:行者123 更新时间:2023-11-29 09:26:37 24 4
gpt4 key购买 nike

找了好几个小时还是没弄明白:(

无论如何,我正在创建一个脚本,它会自动将大约 40 个不同的目录同步到另一台服务器上的 40 个其他目录。如果您想查看整个脚本,可以在这里查看:http://pastebin.com/Nt3KKvx9

但重要的一点是我运行 rsync 的 for 循环

for ((i=0; i<${#websys[@]}; i++))
do
localpath="/nusdata/staff/NUS/NUS/Systems/${kiskasys[$i]}"
remotepath="/home/www/html/nusalaska.com/html/systems/${websys[$i]}"
rsync -rlptnvz -s "$localpath" -e "ssh -p 50014" "nusak@webserver:$remotepath/"
done

问题是数组“kiskasys”有许多目录名中有空格(例如:'101 greenbrook')。我试过让数组变量在它们周围有单引号,在它们周围有双引号,像'\'这样的转义空格,以及所有三者的组合。我也试过将 $localpath 放在引号中,而不是在引号中等等。

我想我只是对 -s (--protect-args) 如何处理空格以及我如何让它在我的情况下工作感到困惑。

错误输出总是如下所示:

rsync: change_dir "/nusdata/staff/NUS/NUS/101" failed: No such file or directory (2)

rsync: change_dir "/nusdata/staff/NUS/NUS/'101 greenbrook'" failed: No such file or directory (2)

感谢任何帮助!

谢谢

找到我的问题

在将我的代码从我的脚本复制到此页面时,我不小心复制错了...但是在复制错误时,我在上面发布的是非常好的代码,可以正常工作哈哈。

所以我上面发布的是解决我自己问题的方法。

原来在 localpath 变量中有单引号,如下所示:

localpath="'/nusdata/staff/NUS/NUS/Systems/${kiskasys[$i]}'"

单引号是问题所在。为了每个人的利益,这里有一个示例输出

echo ${kiskasys[1]}

#output would look like this:

101 greenbrook

基本上没有特殊的转义字符等

最佳答案

就其值(value)而言,我无法重现您的问题。如果我将 localpathremotepath 设置为带空格的目录:

localpath="/home/lars/tmp/so/dir1/a directory"
remotepath="/home/lars/tmp/so/dir2/a directory"

然后运行您的 rsync 命令(针对我的环境稍作修改):

rsync -rlptvz -s "$localpath/" -e "ssh" "localhost:$remotepath/"

它只是工作。以下是 dir1 的内容:

dir1/a directory/file1
dir1/a directory/file3
dir1/a directory/file2

运行 rsync 后,dir2 看起来像这样:

dir2/a directory/file1
dir2/a directory/file3
dir2/a directory/file2

您能否显示导致您在上面看到的错误的特定命令行?也许使用 -x 标志运行脚本并准确显示 localpathremotepath 是如何设置的。

关于Bash——文件名中的 Rsync 变量有空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11909103/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com