从多个文件中删除时间戳

时间:2018-05-08 08:12:03

标签: bash

是否有一种快速而聪明的方法可以从具有不同名称的多个文件中删除各种时间戳?尽管值不同,时间戳格式始终保持不变。我的文件的一个例子是......

A_BB_CC_20180424_134312
A_B_20180424_002243
AA_CC_DD_E_20180424_223422
C_DD_W_E_D_20180423_000001

预期输出

A_BB_CC
A_B
AA_CC_DD_E
C_DD_W_E_D

请注意,最后一个文件具有不同的时间戳,如果这是特定日期的时间戳删除或全部或两个版本,我不介意。我的问题是我无法想出不断变化的时间价值的代码:(

提前致谢

编辑 - 添加编辑以显示为什么这不像Tripleee所认为的那样重复。他的重复链接是针对具有相同前缀的文件,我的问题是关于具有不同名称的文件,所以答案是不同的。

2 个答案:

答案 0 :(得分:1)

使用参数展开%% bash ism 删除文件名的结尾:

for i in /my/path/*; do mv  "$i" "${i%%_2018*}"; done

这取决于以2018...

开头的时间戳

使用awk:

for i in /my/path/*; do mv "$i" $(awk -v FS=_ 'NF-=2' OFS="_" <<< "$i"); done

awk脚本基于字段分隔符_。它打印文件名,而不包含表示时间戳的最后2个字段。

答案 1 :(得分:1)

为了重命名一组文件并在重命名过程中应用正则表达式,您可以使用rename命令。
所以在你的例子中:

rename 's#_[0-9]*_[0-9]*##' *_[0-9]*

这将重命名当前目录中以_结尾的所有文件,后跟数字。
它会删除所有_后跟数字后跟_后跟数字。