【问题标题】:Mass rename in shell script在 shell 脚本中批量重命名
【发布时间】:2016-04-24 02:23:06
【问题描述】:

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

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 的文件。他们都需要保留原来的名字。应该改变的只是删除日期。

【问题讨论】:

  • 要全部重命名为blabla.log???请准确地说出您的需求。
  • ${f%.[0-9][0-9][0-9][0-9].[0-9][0-9].[0-9][0-9]}: 额外的.% 而不是#
  • 非常感谢,正如我所需要的那样工作。

标签: regex shell rename git-bash


【解决方案1】:

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

此外,您在必须删除的内容中缺少 .,您不想以 blabla.log. 结尾。

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

一起:

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

【讨论】:

    猜你喜欢
    • 2011-04-02
    • 2013-09-11
    • 2013-03-12
    • 2021-06-17
    • 1970-01-01
    • 2016-11-17
    • 1970-01-01
    • 1970-01-01
    • 2017-02-27
    相关资源
    最近更新 更多