【问题标题】:what is the best way to rename a set of files using a regex?使用正则表达式重命名一组文件的最佳方法是什么?
【发布时间】:2012-02-09 21:10:53
【问题描述】:

我有一个充满文件名的目录:“file1.mp4.mp4 file1.mp4.mp4 file1.mp4.mp4 ...”。

我想使用 find 从 "file1.mp4.mp4" 到 "file1.mp4" 和其他一些 bash 工具重命名它们,它看起来像这样,但带有正则表达式:

找到 . -name "*.mp4" |xargs echo -0

【问题讨论】:

标签: linux bash ubuntu terminal command-line-arguments


【解决方案1】:

你有rename 命令吗?如果是这样,您可以尝试:

rename .mp4 "" *.mp4.mp4

这将从当前目录中所有扩展名为 .mp4.mp4 的文件中删除最后的 .mp4 后缀。

【讨论】:

    【解决方案2】:

    使用重命名。如果所有文件都在同一个目录下,你可以这样做:

    rename 's/\.mp4.mp4$/.mp4/' *.mp4.mp4
    

    否则你可能想要这样的东西:

    rename 's/\.mp4.mp4$/.mp4/' `find . -name "*.mp4.mp4"`
    

    另外,要查看运行 rename 时会发生什么,只是为了调试语句,请执行以下操作:

    rename --no-act 's/\.mp4.mp4$/.mp4/' *.mp4.mp4
    

    如果文件名包含空格,这甚至可以工作,例如:

    $ touch foo.mp4.mp4
    $ touch "bar baz.mp4.mp4"
    $ ls
    bar baz.mp4.mp4  foo.mp4.mp4
    $ rename  's/\.mp4.mp4$/.mp4/' *.mp4.mp4
    $ ls
    bar baz.mp4  foo.mp4
    $ 
    

    【讨论】:

    • 这是什么rename 命令?我的不适用于 's/\.mp4.mp4$/.mp4/' 或识别 --no-act
    • 我正在运行 Ubuntu 11.11。据我所知,rename 是 Ubuntu 附带的 BASH 版本的标准配置。如果您查看您的手册页,您的 rename 的语法可能与我的不同?
    • 你的解决方案的问题是当文件名中有空格时它不起作用。
    • 在我的机器上可以;我已经编辑了答案以添加合适的示例。
    • 程序重命名不是 Bash 的一部分,而是 Perl 包的一部分。
    【解决方案3】:

    或者在循环中尝试这个简单的 bash 命令?

    mv /path/to/file.{mp4.mp4, mp4}
    

    【讨论】:

      【解决方案4】:
      find . -name '*.mp4.mp4' -exec echo mv {} \`dirname {}/\`/\`basename {} .mp4\` \; > mp4.sh && ./mp4.sh && rm mp4.sh
      

      【讨论】:

      • 你的解决方案的问题是当文件名中有空格时它不起作用。
      • 这与OQ相当一致,如果需要更改是微不足道的。
      【解决方案5】:

      试试这样的 -

      for file in /path/to/dir/*.mp4; do 
          mv "$file" "${file%.*}"; 
      done
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-05-18
        • 1970-01-01
        • 2011-09-14
        • 1970-01-01
        • 2017-08-10
        • 1970-01-01
        • 2019-01-29
        相关资源
        最近更新 更多