如何在 shell 脚本中使用通配符连接字符串和变量

How to concat string and variable with wild card in shell script

我正在使用 Amazon Centos 服务器,我想使用 shell 脚本检查文件是否存在。

我有目录位置和文件名格式。

我的代码:

yesterdaydate= date -d '-1 day' '+%Y%m%d'
echo $yesterdaydate
Filetemp='/data/ftp/vendor/processed/ccs_'
Filetemp=$Filetemp$yesterdaydate
echo $Filetemp

预计最终结果应该是这样的/data/ftp/vendor/processed/ccs_20210221_171503_itemsku.xml

当前结果:/data/ftp/corecentric/processed/ccs_

我想要 Filetemp_yesterdaydate_wildcard(*)_itemsku.xml

格式的结果

通配符 (*) 随文件创建的时间而变化。

我怎样才能做到这一点?

只要您不引用通配符,Globs(= 通配符)就可以很好地处理变量。
这里我们使用数组和 bash 的 nullglob 选项来计算找到的文件数。

#! /bin/bash
shopt -s nullglob
yesterday=$(date -d '-1 day' '+%Y%m%d')
files=(/data/ftp/vendor/processed/ccs_"$yesterday"_*_itemsku.xml)
if (( "${#files[@]}" > 0 )); then
   echo "Found the following ${#files[@]} file(s)"
   printf %s\n "${files[@]}"
else
   echo "Found nothing"
fi

请注意,如果有这样的文件,这也将匹配 ...20210222_something that is not a time string_itemsku.xml。如果是这种情况,您可以将 glob * 更改为 [0-2][0-9][0-5][0-9][0-5][0-9].