You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Bash变量存储的文件名中提取日期戳并批量复制文件

从Bash变量提取日期并批量复制文件的单行命令方案

以下几种单行命令可以实现你的需求,同时避免解析ls输出的潜在问题:

方法1:用Bash内置参数扩展(推荐,无需外部工具)

dateis="${filename##*__}"; dateis="${dateis%.csv}"; cp /opt/project/xxxx/*"$dateis"*.csv /opt/project/jdev/data/landing/landing_xxxx/
  • ${filename##*__}:移除变量filename中最后一个__及其之前的所有内容,得到2023-05-28.csv
  • ${dateis%.csv}:移除dateis变量末尾的.csv后缀,最终得到日期戳2023-05-28
  • 复制命令中用双引号包裹$dateis,避免文件名含空格、特殊字符时出现错误

方法2:用awk提取日期

dateis=$(echo "$filename" | awk -F'[_.]' '{print $(NF-1)}'); cp /opt/project/xxxx/*"$dateis"*.csv /opt/project/jdev/data/landing/landing_xxxx/
  • 以_和.作为分隔符,取倒数第二个字段(也就是日期部分)

方法3:用sed正则提取

dateis=$(echo "$filename" | sed -E 's/.*__(.*)\.csv/\1/'); cp /opt/project/xxxx/*"$dateis"*.csv /opt/project/jdev/data/landing/landing_xxxx/
  • 用正则匹配__之后、.csv之前的内容,提取出日期戳

关于你之前尝试的ls命令的问题

直接解析ls的输出作为cp的参数是不推荐的:如果文件名包含空格、换行或特殊字符,会导致命令执行出错。建议始终用通配符(比如*$dateis*.csv)直接匹配文件,这是Bash处理文件的最佳实践。

内容的提问来源于stack exchange,提问作者R.Merritt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 12:27:13