ファイル名の特定の部分名を小文字から大文字に変更します。

ファイル名の特定の部分名を小文字から大文字に変更します。

次の名前のファイルが複数あるディレクトリがあります。

London_qle_merged
Paris_qle_merged
Tokyo_qle_merged
London_qle_obs
Paris_qle_merged
Tokyo_qle_merged

ファイル名に* mergedを含むファイルの名前を変更する方法は次のとおりです。

London_Qle_merged
Paris_Qle_merged
Tokyo_Qle_merged

私は次のようにループを実行できることを知っています。

for name in Paris London Tokyo do;
  mv ${name}_qle_merged ${name}_Qle_merged
done

しかし、他の方法はありませんか?

答え1

確かに。 ksh/Bash/zshから:

for f in *_merged; do
    mv -- "$f" "${f/_qle_/_Qle_}" 
done

または標準住宅にあります。

for f in *_qle_merged; do
    mv -- "$f" "${f%_qle_merged}_Qle_merged" 
done

たとえば、参照してください。BashGuideのパラメータ拡張

答え2

私はawkとtrの組み合わせでこれを達成しました。

注文する

find . -type f -iname "*merged" |tr -d "./" | awk -F "_" '{print "mv" " " $1"_"$2"_"$3 " " $1"_"toupper(substr($2,1,1))substr($2,2)"_"$3 }' | sh

以下はマージされたファイルです

London_qle_merged
Paris_qle_merged
Tokyo_qle_merged 

次に名前を変更する

London_Qle_merged
Paris_Qle_merged
Tokyo_Qle_merged

答え3

これにより、スクリプトループなしで操作が実行され、子プロセスが作成されます。

rename 's/qle/Qle/' *_merged

答え4

コマンドrenameはあなたの友人です。sedファイル名として使用されます。 (Larry Wallのバージョンがあることを確認してください。この名前のプログラムが複数あります。)

以下の回答はファイルの内容に関するものなので、sedを使って再利用しましたrenamehttps://unix.stackexchange.com/a/211579/4778

rename  -e 's/_(.)/_\u$1/' *_merged

最初の文字の直後に続く文字を大文字にします_

この特定の入力に対するより簡単なソリューション

rename 's/qle/Qle/' *_merged

関連情報