
次の名前のファイルが複数あるディレクトリがあります。
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
を使って再利用しましたrename
。
https://unix.stackexchange.com/a/211579/4778
rename -e 's/_(.)/_\u$1/' *_merged
最初の文字の直後に続く文字を大文字にします_
。
この特定の入力に対するより簡単なソリューション
rename 's/qle/Qle/' *_merged