【问题标题】:Batch rename files based on a common pattern基于通用模式批量重命名文件
【发布时间】:2017-09-19 18:12:20
【问题描述】:

我有很多文件,其中都有text这个词。

点赞test text22 test.mp3

“test”可以包含各种字符 -> -/()(&%0-9...

现在我想重命名每个文件,以便在每个“文本”之前添加一个下划线,例如test_test22 test.mp4。有没有直接的方法可以做到这一点?

【问题讨论】:

    标签: bash rename


    【解决方案1】:

    使用 Perl 的独立重命名命令:

    rename -n 's/ (text[0-9]{1,2})/_$1/' *text*
    

    如果一切正常,请删除选项-n

    【讨论】:

      【解决方案2】:

      另一种方式来说明(通常非常有用)在 Bash 中使用正则表达式匹配。

      #!/bin/bash
      for file in *
      do
        if [[ $file =~ (.*)text(.*) ]] ; then
          mv "$file" "${BASH_REMATCH[1]}text_${BASH_REMATCH[2]}"
        fi
      done
      

      如果您想要做的不仅仅是重命名文件,这将特别有用。

      【讨论】:

        【解决方案3】:

        我假设您不想添加下划线,而是将前导空格替换为,就像在您的示例中一样(但它又具有 mp3 -> mp4 所以只是确保):

        $ ls
        test text22 test.mp3
        text22 test.mp3
        $ for f in *text*; do "echo ${f/ text/_text}" ; done
        test_text22 test.mp3
        text22 test.mp3
        

        mvmv "$f" "${f/ text/_text}" 替换回声

        【讨论】:

          猜你喜欢
          • 2011-05-07
          • 2012-07-23
          • 2016-10-08
          • 2018-11-10
          • 2018-10-19
          • 2013-12-19
          • 2017-04-20
          • 2016-06-08
          相关资源
          最近更新 更多