Использовать grep / sed для поиска и замены имени файла? - PullRequest
0 голосов
/ 05 апреля 2011

У меня есть куча файлов изображений, которые были неверно названы «thing@x2.png », и они должны быть« some@2x.png ». Они распределены по нескольким каталогам следующим образом:

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

Как я могу использовать grep + sed для поиска / замены при необходимости?

Ответы [ 4 ]

1 голос
/ 05 апреля 2011

Рубин (1,9 +)

$ ruby -e 'Dir["**/*@x2.png"].each{|x| File.rename( x, x.sub(/@x2/,"@2x") ) }'
0 голосов
/ 05 апреля 2011

Посмотрите на qmv и переименуйте

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

запустит ваш редактор по умолчанию и позволит вам интерактивно редактировать имена

rename s/@x2/@2x/ *.png
0 голосов
/ 05 апреля 2011

Слэши выглядят для меня как linuxy / unixoid. У вас есть найти и переименовать?

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

Переименование стоит установить, входит в некоторый perl-пакет.

0 голосов
/ 05 апреля 2011

С 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, если выходной сигнал достаточен

...