在SFTP bash脚本中更正正则表达式

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

我想自动化SFTP进程以传输在本地服务器中创建的最后一个文件并将其发送到远程服务器。

在本地服务器我有“/ Source / Path /”我有如下命名的文件:

Logfile_2019-04-24
Logfile_2019-04-24_old.txt

这是我目前的脚本:

dyear=`date +'%Y' -d "1 day ago"`
dmonth=`date +'%b' -d "1 day ago"`
ddate=`date +%Y-%m-%d -d "1 day ago"`


HOST='192.168.X.X'
USER='user'
PASSWD='password'
localpath='/Source/Path/'$dyear'/'$dmonth'/'*$ddate*'.txt'
remotepath='/Destination/Path/'$dyear'/'$dmonth'/'

echo $localpath
echo $remotepath

export SSHPASS=$PASSWD
sshpass -e sftp $USER@$HOST << EOF
put '$localpath' '$remotepath'
EOF

当我做echo $localpath它打印正确的文件但在脚本中我得到这个错误:

Connecting to 192.168.X.X...
sftp> put '/Source/Path/2019/Apr/*2019-04-24*' '/Destination/Path/2019/Apr/'
stat /Source/Path/2019/Apr/*2019-04-24*: No such file or directory

如何在这部分*$ddate*'.txt' in followingline正确的正则表达式:

    localpath='/Source/Path/'$dyear'/'$dmonth'/'*$ddate*'.txt'

为了传输文件“Logfile_2019-04-24_old.txt”?

提前致谢

bash shell sftp glob heredoc
3个回答
1
投票

更换

put '$localpath' '$remotepath'

put "$(echo $localpath)" '$remotepath'

在你的here-doc中强制使用wildcard(*)替换。

如果您的通配符被多个文件替换,则不起作用。


0
投票

我认为你不需要这个问题的正则表达式。您可以通过以下shell命令获取在目录中创建的最新文件,并将其分配给localpath变量。

ls -t directoryPath | head -n1

latestfile=`ls -t /Source/Path/$dyear/$dmonth | head -n1`
localpath='/Source/Path/'$dyear'/'$dmonth'/'$latestfile''
remotepath='/Destination/Path/'$dyear'/'$dmonth'/'

0
投票

如果能够正确获取文件名,源和目标目录,则可以直接使用scp将文件复制到远程服务器:

sshpass -p $PASSWD scp $localpath $USER@$HOST:$remotepath
© www.soinside.com 2019 - 2024. All rights reserved.