传输文件的 Shell 脚本,该文件的日期从名称中取为从ill(Nov1)到to(Dec1)

传输文件的 Shell 脚本,该文件的日期从名称中取为从ill(Nov1)到to(Dec1)

好吧,这个 shell 脚本可能听起来很复杂,但我不知道如何实现这一点。

所以这是要求。

在此输入图像描述

请注意上述文件。

文件名如下。

Meter_20200120100846.xls
Meter_20200121100846.xls
Meter_20200122100846.xls
Meter_20200123100846.xls
Meter_20200124100846.xls
Meter_20200125100846.xls

所以我想创建一个脚本将这些文件复制到另一台服务器。但这里有一个问题,最后的数字是该文件的日期。因此文件 1 中的 20200120 表示它是在 20/01/2020 创建的。

所以基本上我想创建这样一个脚本,将输入作为 20/01/2020 或 2020012025/01/2020 或 20200125 并将所有文件复制到另一台同名服务器。

我可以在命令中使用任何东西来复制 scp、sftp 或 rsync。

基本上创建这样一个脚本,从日期到结束日期并将所有文件复制到另一台服务器。

老实说,我不知道是否有可能做到这一点。

但是伙计们,如果你们能够知道这样的解决方案,那么它真的会对我有帮助。

感谢致敬, 萨加尔·曼达尔

答案1

如果我理解正确的话:

# Here you set the range of dates
from="20200121" 
to="20200125"
for f in *.xls; do 
  [[ $(date -d "${f:6:8}" +%s) -ge $(date -d "$from" +%s) ]] &&
  [[ $(date -d "${f:6:8}" +%s) -le $(date -d "$to" +%s) ]] &&
  echo "$f in range" || # Here your actions
  echo "$f not in range" 
done

输出:

Meter_20200120100846.xls not in range
Meter_20200121100846.xls in range
Meter_20200122100846.xls in range
Meter_20200123100846.xls in range
Meter_20200124100846.xls in range
Meter_20200125100846.xls in range

答案2

date 命令就是你要找的

$ date -d 1/25/2020 +%Y%m%d
20200125

-d mm/dd/yyyy - 将输入日期提供给命令。

+%Y%m%d - 你想要的输出是什么。

  • %Y - 四位数的年份
  • %m - 两位数月份
  • %d - 两位数的月份日期。

相关内容