我正在制作一个小脚本来使用rsync
.我陷入了一个可变的问题。
- 我有文件夹:
/home/folder_1/
,其中有文件夹20210725
、20210726
,20210727
并且这些文件夹每天都会增加。 - 在每个文件夹中,我都有一个名为的文件夹
folder_2
,其中包含我要传输的文件。 - 完整路径的示例:
/home/folder_1/20210727/folder_2/*
由于我需要每天从机器 1 到机器 2 进行传输,所以我想将脚本放在 cron 中并每天自动运行它。
考虑到今天,我写道:
y=${BASH_REMATCH[1]}
m=${BASH_REMATCH[2]}
d=${BASH_REMATCH[3]}
BASEDATE=`date '+%Y%m%d'`
DATA=$(eval "echo $BASEDATE")
所以如果我说echo $DATA
,它会返回20210727
今天:2021 年 7 月 27 日
但是,当我输入这样的变量时:
VAR_1='/home/folder_1/${DATA}/folder_2/*'
它不工作。echo $VAR_1
将返回
/home/folder_1/${DATA}/folder_2/*
而不是我想要的:
/home/folder_1/20210727/folder_2/*
我需要它,因为我的 rsync 命令是这样的:
rsync -av user@machine_1:${VAR_1} ${VAR_2}
是VAR_2
上新位置的路径machine_2
:
VAR_2='/home/folder_3/folder_4/'
我只是不知道如何使用该变量返回正确的路径以及每天的日期。
您能以某种方式提供帮助/建议吗?先感谢您!
答案1
您遇到的问题是单引号中禁用了变量扩展。所以,你的任务
VAR_1='/home/folder_1/${DATA}/folder_2/*'
应该改为
VAR_1="/home/folder_1/${DATA}/folder_2/*"
反而。双引号仍然会抑制全局字符 ( *
) 的扩展,这是必要的,因为您希望将其作为参数传递给rsync
。
作为旁注: