it-swarm-ja.com

Bashを使用してファイル名のN番目の文字の大文字と小文字を変更しますか?

ファイルのフォルダがあり、5番目の文字の大文字と小文字を変更したいと思います。

これから:

ABC-xyz
DEF-xyz
GHI-xys

これに:

ABC-Xyz
DEF-Xyz
GHI-Xys

Xが大文字に変換されていることがわかります。

Bashでこれをどのように行うかについてのアイデアはありますか?

2
WackGet

純粋なbashの例:

#!/usr/bin/env bash

for f in *; do
  g="${f::4}"  ##Split the first four characters
  h="${f:4:1}" ##just the fifth character (starts counting at 0)
  i="${f:5}"   ## character 6+ (again, counting from 0)
  mv -- "$f" "$g${h^^}$i"
    ##At the end, put the strings back together
    ##but make $h (character 5) uppercase
done
exit 0

実際には、おそらくPerl-rename(Ubuntuリポジトリではrenameと呼ばれます。他のいくつかではprenameで呼ばれることを知っています)を使用します。

rename 's/(.{4})(.)/$1\u$2/' *
5
evilsoup