【问题标题】:Wildcard in bash scriptbash 脚本中的通配符
【发布时间】:2014-04-13 19:24:54
【问题描述】:

我有一个 bash 脚本来从 ftp 检索文件。

现在文件的文件名中有一部分是日期字符串,但还有未定义的数字,每个文件都会更改。我想根据日期下载文件。

这是我的代码。我只需要做通配符技巧,ftp脚本已经可以工作了。

filename=$(echo $TIMESTAMP'0***vel.radar.h5')

星星是 3 位数字,我无法估计,所以我会为它们使用通配符。

谢谢

【问题讨论】:

  • 问题是什么?另请注意,* 代表任意数量的字符,因此**** 相同。一个字符的通配符是?
  • 我需要使用 get $filename 从 ftp 服务器下载文件

标签: bash wildcard


【解决方案1】:

听起来您想处理多个文件,但您的脚本一次只能处理一个文件。此外,由于您指定了 FTP,听起来文件在 FTP 服务器上,在这种情况下,本地文件名扩展将无济于事。

您可能希望使用 ftp 客户端的 mget 命令在远程端下载多个匹配模式的文件。您还希望将$TIMESTAMP 作为模式的一部分。我会建议这样的事情:

ftp remote-hostname <<EOF
cd path/to/log/files
prompt
mget ${TIMESTAMP}0???vel.radar.h5
bye
EOF

这使用一个 here-document(&lt;&lt;EOFEOF 单独一行)向 ftp 命令提供输入文本。它将扩展变量$TIMESTAMP,使其成为mget 命令的一部分,例如如果 $TIMESTAMP 是 12345,ftp 命令将被告知mget 123450???vel.radar.h5

【讨论】:

    【解决方案2】:

    用 ?您不仅包括数字,还包括任何字符。因此,如果您只想包含数字,则可以替换 ???带有 [0-9][0-9][0-9] 的字符。

    例子:

    如果您有以下文件:

    $ ls 0123vel.h5 0333vel.h5 033vel.h5 0pecvel.h5

    使用这个 ls 你可以显示正确的文件:

    $ ls 0[0-9][0-9][0-9]vel.radar.h5 0123vel.h5 0333vel.h5

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-01
      • 2013-11-14
      • 1970-01-01
      • 2015-05-04
      • 1970-01-01
      • 2021-03-13
      • 2012-08-13
      • 1970-01-01
      相关资源
      最近更新 更多