【问题标题】:Correct Regex in SFTP bash script更正 SFTP bash 脚本中的正则表达式
【发布时间】:2019-09-15 11:14:18
【问题描述】:

我想自动化一个 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

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

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

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

提前致谢

【问题讨论】:

  • 您是在使用 glob 来匹配多个文件,还是试图抓取一个特定的文件? mywiki.wooledge.org/glob
  • @vintnes 我正在尝试匹配单个文件。

标签: bash shell sftp glob heredoc


【解决方案1】:

我认为您不需要正则表达式来解决这个问题。您可以通过以下 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'/'

【讨论】:

  • 感谢您的回答。问题是如果最后一个文件被命名为Logfile_2019-04-24 我会传输不正确的文件。因此,我添加了正则表达式 *$ddate*.txt 尝试匹配名为 Logfile_2019-04-24_old.txt 的文件,以防该文件具有相同的日期但不是最后创建的。
【解决方案2】:

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

sshpass -p $PASSWD scp $localpath $USER@$HOST:$remotepath

【讨论】:

  • 感谢 Lohit 的回答。问题是远程服务器只接受 SFTP。
  • 同样不要使用多个单引号,在定义路径变量时,可以直接使用双引号,它会自动替换值。
  • 这里的问题是 put 命令不支持元字符。它也需要一个参数。您将不得不重写代码以获取确切的文件名,然后使用 put 语句。参考。 this link
【解决方案3】:

替换

put '$localpath' '$remotepath'

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

在您的 here-doc 中强制替换通配符 (*)。

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

【讨论】:

  • 优秀的赛勒斯。它完美地工作。非常感谢您的帮助。
猜你喜欢
  • 2011-11-01
  • 2013-06-06
  • 2011-10-17
  • 1970-01-01
  • 1970-01-01
  • 2014-08-06
  • 2011-04-16
  • 1970-01-01
相关资源
最近更新 更多