使用grep / sed进行文件名搜索&更换?

时间:2011-04-04 21:23:34

标签: command-line sed grep replace

我有一堆错误命名为'something@x2.png'的图像文件,它们需要是'something@2x.png'。它们分布在多个目录中,如下所示:

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

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

4 个答案:

答案 0 :(得分:1)

红宝石(1.9 +)

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

答案 1 :(得分:0)

使用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

答案 2 :(得分:0)

查看qmv并重命名

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

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

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

答案 3 :(得分:0)

斜线看起来像linuxy / unixoid给我。你找到并重命名了吗?

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

重命名值得安装,有一些perl-package。