Macにはrename
コマンドが入ってなかったので、mv
コマンドをfor
文で回す方法で、ファイル名の一括置換を試みる。
練習するときはmv
コマンドのかわりにecho
コマンドを使えばいいです。
方法
ファイル名の先頭・末尾に文字列を追加
カレントディレクトリにある全てのファイル・ディレクトリに適用;
ls # aaa.html # bbb.html # dir/ for name in *; do mv $f hoge_${name}_geho; done ls # hoge_aaa.html_geho # hoge_bbb.html_geho # hoge_dir_geho/
ファイルだけに適用するには、ワイルドカード*
をfind . -type f
に置き換えればよい;
ls # aaa.html # bbb.html # dir/ for name in `find . -typr f`; do mv $name hoge_${name}_geho; done ls # hoge_aaa.html_geho # hoge_bbb.html_geho # dir/
ディレクトリにだけ適用したい場合はfind . -type f
を使えばよい。
ファイルの拡張子を変更
拡張子.txt
を.md
に一括置換;
ls # aaa.html # bbb.txt # ccc.txt for name in *; do mv $name ${name%.txt}.md; done ls # aaa.html # bbb.md # ccc.md
ファイル名に含まれる文字列を置換
例えば、ファイル名に含まれる1997
という文字列を2021
に置き換える;
ls # aaa1997.jpg # bbb1997.jpg for name in *; do mv $name ${name/1997/2021}; done ls # aaa2021.jpg # bbb2021.jpg
正規表現を使って指定できるので、より複雑な処理もできます。
補足
find
コマンドはその名の通りファイルやディレクトリを検索するコマンドです。
${name}
という形のものは、シェルの変数展開というもので、#
や%
や/
でいろいろな処理をしつつ変数を展開できます。
また、ファイル名の一括変更はmv
ではなくrename
コマンドを使えばよりシンプルにかけるみたいです。
今回はgit mv
したかったのでシェルのfor
文を使った方法で書いてみました。
以上。