在shell脚本中批量重命名

时间:2016-01-18 19:42:01

标签: regex shell rename git-bash

我有一堆这种格式的文件:

blabla.log.YYYY.MM.DD

其中YYYY.MM.DD类似于(2016.01.18

我有很多文件夹,每个文件夹大约有1000个文件,所以我想要一个简单的脚本来重命名它们。我想将它们重命名为

blabla.log

所以基本上,我只是在最后剥离日期。这就是我所拥有的:

for f in [a-zA-Z]*.log.[0-9][0-9][0-9][0-9].[0-9][0-9].[0-9][0-9]; do 
    mv -v $f ${f#[0-9][0-9][0-9][0-9].[0-9][0-9].[0-9][0-9]}; 
done

此脚本输出:

mv: `blabla.log.2016.01.18' and `blabla.log.2016.01.18' are the same file

了解更多信息:

  • 我在Windows上,但是我在gitbash中运行这个脚本
  • 由于某种原因,我的gitbash无法识别“重命名”命令
  • 某些正则表达式模式(如[0-9]{4}似乎不起作用)

我真的迷路了。感谢。

编辑:我需要重命名每个在结尾都有日期的文件,该文件来自:* .log.2016.01.18。他们都需要保留原来的名字。所有应该改变的是删除日期。

1 个答案:

答案 0 :(得分:3)

您必须使用%而不是#:您想要从结尾处删除,而不是字符串的开头。

此外,您错过了必须删除的内容.,您不希望以blabla.log.结尾。

当文件名包含特殊字符时,引用变量名称可防止出现意外。

合:

mv -v "$f" "${f%.[0-9][0-9][0-9][0-9].[0-9][0-9].[0-9][0-9]}"