首页 > 解决方案 > 带有日期前缀的unix中的大量文件重命名

问题描述

嗨,我需要对这样的文件进行大量重命名:

“Some Text Here 01 December 2019.pdf”转换成这种格式:“2019-12-01 Some Text Here.pdf”

“这里的一些文本”可能有不同的长度,并且在文件之间由不同的词组成。

我想修改为数字数据的文本我也想删除(“2019 年 12 月 1 日”)

如何对目录中具有这种格式的所有文件进行大规模重命名?

标签: unixwhile-loopfindprintfmv

解决方案


regex='^\(.*\)\s\([0-9]\{2\}\s\w\+\s[0-9]\{4\}\)\(\.[^.]*\)$' 
for old in *.pdf ; do
    old_name=`echo "$old" | sed -e "s/$regex/\1\3/"` 
    date_string=`echo "$old" | sed -e "s/$regex/\2/"`
    new="`date +'%Y-%m-%d' -d \"$date_string\"` $old_name"
    mv -v "$old" "$new"
done

推荐阅读