次のようなファイル一覧がある。
ファイル名に含まれている「kk」という文字列を、「mm」に置き換えたい。
# ls
RUN_kk.sh environment_kk_InitialSettingsReSTART_kk.sh environment_kk_InitialSettingsSavedenvironment_kk_Create environment_kk_Script
次のようなワンライナーのコマンドを発行することによって、一挙に意図したようにファイル名を変更できた。
(後で挙げるように、renameコマンドを用いると同じことができることがわかった。)
# for f in `ls` ; do mv $f `echo $f | sed -e "s/kk/mm/"` ; done
「`」は、「シフトキー+@」で得られる文字で、バックティック、バッククォートと呼ばれる。
(説明)
◯ for f in `ls`
lsコマンドで取得できるファイル一覧に対して繰り返し処理を宣言する。
これにより1ファイルごとにループ処理が行われる。
一回のループ処理につき異なるファイル名が変数fに格納され、do以下の処理がなされる。
do以下において、$fで変数に格納された文字列を取得できる。
◯ mv $f `echo $f | sed -e "s/kk/mm/"`
一見複雑であるが、これは次のような形になっている。
mv $f `変更後のファイル名`
`echo $f | sed -e "s/kk/mm/"` で、$fに載ってくるオリジナルファイル名に対して、
ターゲットの文字列(kk)を検索して、新しい文字列(mm)に置き換えたものを出力している。
つまり、mv RUN_kk.sh RUN_mm.sh のようなコマンドが実行されることになる。
一連の処理がなされた後、次のようにファイル名が一挙に書き換わった。
# ls
RUN_mm.sh environment_mm_InitialSettingsReSTART_mm.sh environment_mm_InitialSettingsSavedenvironment_mm_Create environment_mm_Script
■renameコマンドを使う方法
カレントディレクトリにおいて、ファイルやディレクトリそれぞれの名前に含まれているkkをmmに変更する。
# rename "s/kk/mm/" *
forループ回さなくて良いので簡単だった。
<参考>
・【Linuxコマンド】sedで文字列を置換する方法
< https://www.sejuku.net/blog/54595 > 2021年5月25日
・【sed / awk / grep】文字列の置換・抽出・検索と正規表現
< https://qiita.com/shuntaro_tamura/items/e4e942e7186934fae5e7 > 2021年5月25日