【问题标题】:Rename all files in directory from $filename_h to $filename_half?将目录中的所有文件从 $filename_h 重命名为 $filename_half?
【发布时间】:2011-11-19 00:46:20
【问题描述】:

很简单。

如何重命名

05_h.png
06_h.png

05_half.png
06_half.png

至少,我认为这很简单,但是除非您已经知道,否则很难通过 Google 搜索到这种东西。

谢谢....

【问题讨论】:

    标签: bash shell


    【解决方案1】:
    for f in *.png; do
      fnew=`echo $f | sed 's/_h.png/_half.png/'`
      mv $f $fnew
    done
    

    【讨论】:

    • 这对于事先进行试运行非常有用。我首先将mv $f $fnew 替换为echo $fnew 作为第二行,以确保输出看起来正常。
    【解决方案2】:

    使用rename 实用程序:

    rc@bvm3:/tmp/foo $ touch 05_h.png 06_h.png
    rc@bvm3:/tmp/foo $ rename 's/_h/_half/' * 
    rc@bvm3:/tmp/foo $ ls -l
    total 0
    -rw-r--r-- 1 rc rc 0 2011-09-17 00:15 05_half.png
    -rw-r--r-- 1 rc rc 0 2011-09-17 00:15 06_half.png
    

    【讨论】:

      【解决方案3】:

      使用用 perl 编写的 rename 实用程序。 可能是默认情况下它不可用...

      $ touch 0{5..6}_h.png
      
      $ ls
      05_h.png  06_h.png
      
      $ rename 's/h/half/' *.png
      
      $ ls
      05_half.png  06_half.png
      

      【讨论】:

        【解决方案4】:

        试试rename 命令:

        rename 's/_h.png/_half.png/' *.png
        

        更新:

        示例用法:

        创建一些内容

        $ mkdir /tmp/foo
        $ cd /tmp/foo
        $ touch one_h.png two_h.png three_h.png
        $ ls 
        one_h.png  three_h.png  two_h.png
        

        测试解决方案:

        $ rename 's/_h.png/_half.png/' *.png
        $ ls
        one_half.png  three_half.png  two_half.png
        

        【讨论】:

        • @CarolineAlexiou:我添加了示例测试会话。请尝试一下。你可能有一些错字。 ls 的输出是什么?你尝试的rename ...是什么?
        • 在 Mac 上的 bash 中不起作用,fwiw。 rename 不是标准的 Unix 工具。
        • @tandrewnichols,试用homebrew - 安装后,使用brew install rename 可以在几秒钟内重命名
        • 对我来说 rename 不适用于 's//' - 我引用了 man 并且有简单的概要:rename [options] expression replacement file...,在 CentOS 7 上,版本:rename from util-linux 2.23.2
        • 请记住,. 匹配任何字符,而不仅仅是点 - 对于文字点,请改用 \.
        【解决方案5】:
        for i in *_h.png ; do
          mv $i `echo "$i"|awk -F'.' '{print $1"alf."$2}'`
        done
        

        【讨论】:

          【解决方案6】:

          您在寻找纯 bash 解决方案吗?方法有很多,这里有一个。

          for file in *_h.png ; do mv "$file" "${file%%_h.png}_half.png" ; done
          

          这假定当前目录中唯一以_h.png 结尾的文件是您要重命名的文件。

          更具体

          for file in 0{5..6}_h.png ; do mv "$file" "${file/_h./_half.}" ; done
          

          假设这两个例子是你唯一的。文件。

          对于一般情况,has 中的文件重命名 beencovered before.

          【讨论】:

            【解决方案7】:

            只需使用 bash,无需调用外部命令。

            for file in *_h.png
            do
              mv "$file" "${file/_h.png/_half.png}"
            done
            

            不要加#!/bin/sh

            对于那些需要单线的人:

            for file in *.png; do mv "$file" "${file/_h.png/_half.png}"; done
            

            【讨论】:

            • 很好地使用 bash 的内置字符串替换而不是 sed
            • 是文件/_h.png/_half.png 正则表达式吗?
            • 不,格式是这样的:${string/substring/substitution} - “替换第一次出现”。有关更多信息,请查看此备忘单(“字符串”部分):bruxy.regnet.cz/linux/bash_cheatsheet/bash_cheatsheet.pdf
            • Do not add #!/bin/sh 有什么原因吗?我尝试使用/不使用此语句。
            • @Ryan @Ishan Jain 实际上它表示必须执行脚本的后端shell。 sh 和 bash 是不同的 shell,因此它可能会影响脚本的行为和语法。由于脚本使用 bash 内置字符串替换,您应该添加标题 #!/bin/bash。这就是说,bash 通常是许多计算机中的默认 shell,因此您不会发现很多差异 :D 您可以找到更多信息here
            【解决方案8】:

            另一种方法可以手动使用批量重命名选项

            右键文件->文件自定义命令->批量重命名 你可以替换 h。有一半。

            这将适用于使用 WinSCP 等的基于 linux 的 gui

            【讨论】:

              【解决方案9】:

              一个班轮:
              for file in *.php ; do mv "$file" "_$file" ; done

              【讨论】:

                【解决方案10】:

                我有一个类似的问题: 在手册中,它描述了重命名为

                rename [option] expression replacement file
                

                所以你可以这样使用它

                rename _h _half *.png
                

                在代码中: '_h' 是您要查找的表达式。 '_half' 是您要替换的模式。 '*.png' 是您正在寻找可能的目标文件的文件范围。

                希望这可以帮助 c:

                【讨论】:

                  【解决方案11】:

                  虽然答案集是完整的,但我需要再补充一个缺失的。

                  for i in *_h.png;
                    do name=`echo "$i" | cut -d'_' -f1`
                    echo "Executing of name $name" 
                    mv "$i" "${name}_half.png"
                  done
                  

                  【讨论】:

                    猜你喜欢
                    • 2014-05-16
                    • 2015-02-28
                    • 2014-11-08
                    • 2014-10-09
                    • 1970-01-01
                    • 2014-07-05
                    • 2012-12-27
                    • 1970-01-01
                    • 2013-08-20
                    相关资源
                    最近更新 更多