【问题标题】:Use grep / sed for filename search & replace?使用 grep / sed 进行文件名搜索和替换?
【发布时间】:2011-07-29 12:09:43
【问题描述】:

我有一堆图像文件被错误地命名为“something@x2.png”,它们必须是“something@2x.png”。它们分布在多个目录中,如下所示:

/images
    something@x2.png
    /icons
        icon@x2.png
    /backgrounds
        background@x2.png

如何根据需要使用 grep + sed 查找/替换?

【问题讨论】:

    标签: command-line sed grep replace


    【解决方案1】:

    Ruby(1.9+)

    $ ruby -e 'Dir["**/*@x2.png"].each{|x| File.rename( x, x.sub(/@x2/,"@2x") ) }'
    

    【讨论】:

      【解决方案2】:

      查看qmv并重命名

      find -iname '*.png' -print0 | xargs -0 qmv -d
      

      将启动您的默认编辑器并允许您以交互方式编辑名称

      rename s/@x2/@2x/ *.png
      

      【讨论】:

        【解决方案3】:

        斜线在我看来是 linuxy/unixoid。你有查找和重命名吗?

        find -name "*@x2*" -execdir rename 's/@x2/@2x/' {} +
        

        rename 值得安装,包含在一些 perl 包中。

        【讨论】:

        • 我找到了,但是在哪里可以重命名?
        • 在手册页中,提到了 perl v5.10.1。 apt-cache search 说:gprename - Complete batch renamer for Linux
        【解决方案4】:

        与bash 2.x/3.x

        #!/bin/bash
        
        while IFS= read -r -d $'\0' file; do
          echo mv "$file" "${file/@x2/@2x}"
        done < <(find images/ -type f -name "something*@x2*.png" -print0)
        

        与bash 4.x

        #!/bin/bash
        
        shopt -s globstar
        
        for file in images/**; do
          [[ "$file" == something*@x2*.png ]] && echo mv "$file" "${file/@x2/@2x}"
        done
        

        注意: 在每种情况下,我都留下了echo,这样您就可以进行试运行,如果输出足够,请删除echo

        【讨论】:

          猜你喜欢
          • 2010-11-13
          • 1970-01-01
          • 2019-06-27
          • 1970-01-01
          • 1970-01-01
          • 2016-06-21
          • 1970-01-01
          • 2014-09-13
          • 1970-01-01
          相关资源
          最近更新 更多