在bash中将文件日期添加到文件名

时间:2016-02-14 04:03:09

标签: macos bash awk

我正在寻找一种以编程方式将文件的日期添加到文件名中。我在Mac,Yosemite(10.10)。

使用Bash,我已经付出了相当大的努力,但到目前为止还没太新。这就是我到目前为止所拥有的:

#!/bin/bash

#!/bin/bash

(IFS='
'
for x in `ls -l | awk '{print$9" "$7"-"$6"-"$9}'`
do 
    currentfilename=$(expr "$x" : '\($substring\)')
    filenamewithdate=$(expr "$x" : '.*\($substring\)')
    echo "$currentfilename"
    echo "$filenamewithdate"
done)

这里的想法是捕获详细的ls输出,使用awk捕获具有文件名($ 9)的列的字符串,以及日期字段($ 7和$ 6),然后循环该输出以捕获先前的文件名和新的带有日期的文件名,用于将文件从旧文件名转换为新文件名。 awk语句添加了一个空格,用于将当前文件名与new分隔开。现在,echo语句用于测试我是否能够解析awk输出。我只是不知道要为$ substring添加什么来获取所需的字符串部分。

我还有更多关于Bash脚本的知识,所以我希望你在我学习的时候能够忍受我。有什么指导吗?

感谢。

1 个答案:

答案 0 :(得分:4)

查看stat man page,您需要:

for file in *; do
    filedate=$(stat -t '%Y-%m-%dT%H:%M:%S' -f '%m' "$file")
    newfile="$file-$filedate"
    echo "current: $file -> new: $newfile"
done

根据您的喜好调整您喜欢的日期时间格式。

您可以使用

保存一行
for file in *; do
    newfile=$(stat -t '%Y-%m-%dT%H:%M:%S' -f '%N-%m' "$file")