【问题标题】:Renaming files with adding a number to filename in bash通过在bash中的文件名中添加数字来重命名文件
【发布时间】:2013-06-15 19:49:23
【问题描述】:

我有很多这样的文件:

13831_1.jpg
13838_1.jpg
138035_1.jpg
138037_1.jpg
138039_1.jpg

我需要在文件名的编号上加上一个 5000000 的值。 结果应该如下:

5013831_1.jpg
5013838_1.jpg
5138035_1.jpg
5138037_1.jpg
5138039_1.jpg

有没有办法用 bash 或 perl 做到这一点?

【问题讨论】:

    标签: bash rename file-rename


    【解决方案1】:
    $filename      = "13831_1.jpg";
    $org           = explode("_".$filename);
    $addnumber     = 5000000+$org[0];
    $string        = implode("_",$addnumber);
    

    【讨论】:

    • 是什么语言的?这绝对不是 bash。
    【解决方案2】:

    仅使用 bash 的一种方法

    for file in *.jpg; do
      number=${file%_*}
      therest=${file#$number}
      mv "$file" "$((number+5000000))$therest"
    done
    

    注意事项:

    【讨论】:

      【解决方案3】:

      执行:rename -v。如果会输出:

      Usage: rename [-v] [-n] [-f] perlexpr [filenames]
      

      这项检查是因为至少有两种不同的重命名工具,它们的功能非常不同。我拥有的解决方案需要重命名来处理 perlexpr。

      那么你可以:

      rename 's/^(\d+)/5000000+$1/e' *.jpg
      

      【讨论】:

      • 我想试试这个(因为它听起来很棒),但我在 cygwin 中似乎没有 rename。你知道我是否/如何得到它吗?
      • @SvendHansen,其实是perl script
      • 我在网上搜了一下,cygwin好像没有。安装包util-linux 会给你一个rename 命令,但它的工作方式更像mv 并且似乎不支持正则表达式(或者如果它不支持这种格式)。不过,有一些第三方/家庭编写的脚本可以提供该功能(例如:nylinuxhelp.com/blogs/command-line/cygwin-rename-command-help
      • 获取脚本 - 它在 doubleDown 注释中链接。
      猜你喜欢
      • 2021-04-02
      • 2013-10-28
      • 1970-01-01
      • 2017-07-28
      • 2020-02-18
      • 2011-12-23
      • 2014-07-07
      • 2021-09-08
      • 2012-09-29
      相关资源
      最近更新 更多