【问题标题】:Using Bash to Move Digits From Specific Location in Filename使用 Bash 从文件名中的特定位置移动数字
【发布时间】:2019-06-26 12:57:15
【问题描述】:

我有以下格式的文件名:

images.jpeg-028

我想将目录中每个文件的文件名从上面的格式转换为以下格式:

images-028.jpeg

文件名末尾的所有数字都是三位数。

基于另一个论坛上的thread,我正在考虑以下内容:

for i in *; do mv "$i"\-(\d+) \-(\d+)"$i"; done

但我对其他基于 Bash 的方法持开放态度。

【问题讨论】:

    标签: regex linux bash for-loop filenames


    【解决方案1】:

    bash 中使用for 循环完成无数文件重命名任务后,我现在发现rename 实用程序非常宝贵。

    这应该适用于您的情况:

    rename 's/\.jpeg-(\d+)/-$1.jpeg/g' images.jpeg-*
    

    注意:我指的是来自PerlFile::Rename 模块,不是rename 实用程序,它包含在util-linux 包中的许多Linux 发行版中。

    如果您已经拥有util-linux 的版本,您可能需要阅读以下内容:

    Get the Perl rename utility instead of the built-in rename.

    如果您打算使用纯 bash 解决方案,或者您只是不想安装 rename 的麻烦,这应该可以:

    for i in images.jpeg-*; do
       mv "$i" "images-${i##*-}.jpeg"
    done
    

    【讨论】:

      猜你喜欢
      • 2016-05-22
      • 1970-01-01
      • 1970-01-01
      • 2015-03-06
      • 1970-01-01
      • 2012-07-08
      • 2019-04-07
      • 2015-12-23
      • 1970-01-01
      相关资源
      最近更新 更多