在Linux bash中动态更改文件名

时间:2018-10-26 09:20:53

标签: linux bash shell

我想将文件名“ Domain_20181012230112.csv”更改为“ Domain_12345_20181012230112.csv”,其中“ Domain”和“ 12345”是常量,而20181012230112始终会更改,但具有固定长度。在bash中,我该怎么做

3 个答案:

答案 0 :(得分:1)

如果您只想将 return DateTimeUtils.formatAsDateTime(this.startTime.toDate()); 替换为Domain_,则只需

Domain_12345_

如果知道只有一个下划线,则可以将其缩短:

for file in Domain_*; 
do
    mv "$file" "${file/Domain_/Domain_12345_}"
done

有关更多信息,请参见string substitutions

答案 1 :(得分:0)

您只需使用date命令即可获取所需的日期和时间信息

date '+%Y-%m-%d %H:%M:%S'
# 2018-10-26 10:25:47

要在文件名中使用结果,可以将其放在``中以对其进行内联评估,例如,可以运行

echo "Domain_12345_`date '+%Y-%m-%d %H:%M:%S'`"
# Domain_12345_2018-10-26 10:29:17

您可以使用日期的手册页找出以毫秒为单位的选项,以很好地添加es。

man date

例如,有%m和%d之类的不同选项,如果有必要,它们总是带有前导零,因此文件名长度保持不变。

要重命名文件,可以使用mv(移动)命令

mv "Domain_20181012230112.csv" "Domain_12345_`date '+%Y-%m-%d %H:%M:%S'`.csv"

其余的练习祝你好运!

答案 2 :(得分:0)

您可以在mv循环中使用for,如下所示:

for file in Domain_??????????????.csv ; do ts=`echo ${file} | cut -c8-21`; mv ${file} Domain_12345_${ts}.csv; done

给出示例的一个文件,这实际上将执行此命令

mv Domain_20181012230112.csv Domain_12345_20181012230112.csv