投げ銭

★当サイトへの投げ銭(PayPal)★

LINK


(無償、寄付歓迎) logo
世界中で使われるISO標準オフィスソフト(MSオフィス互換)

★LibreOfficeの導入事例★
詳細について

人気の投稿(1ヶ月間)

Ad

Ad

投げ銭

★当サイトへの投げ銭(PayPal)★

2021年5月25日火曜日

【Linux Ubuntu 18.04.5】ファイル名に含まれている特定の文字列を別の名前に一挙に置換しファイル名変更する方法


次のようなファイル一覧がある。
ファイル名に含まれている「kk」という文字列を、「mm」に置き換えたい。

# ls
RUN_kk.sh           environment_kk_InitialSettings
ReSTART_kk.sh       environment_kk_InitialSettingsSaved
environment_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_InitialSettings
ReSTART_mm.sh       environment_mm_InitialSettingsSaved
environment_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日


投げ銭

★当サイトへの投げ銭(PayPal)★

Ad

Ad