こんにちは、kiwiです。
Macである規則に従って生成されているファイルに対して、一括で正規表現を使ってファイル名を変更する機会があったので、備忘録的に記録します。
MacのFinderアプリには標準でファイル名の一括変更機能がついており、簡単なリネームであればこれで事足りるのですが、複雑なファイル名の置換を行いたい場合に活用できると思います。
コマンド
IMG_0001.jpeg という形式のファイル名を、 0001.jpg というファイル名に一括で変換する例です。元のファイル名の数字部分を残しつつ、不要な部分の削除や拡張子の変更を行なっています。
find . -name "*.jpeg" > files.txt
sed -E 's/\.\/IMG_([0-9]+)\.jpeg$/& \1.jpg/' files.txt > files2.txt
cat files2.txt | xargs -n2 zsh -c 'mv $0 $1'
find
でファイル名の一覧を生成sed
を使い、元のファイル名とリネーム後のファイル名を並べた一覧を生成- その内容をxargsに渡してコマンドを実行
という感じで動きます。
xargs
の実行コマンドはzsh
となっていますが、bash
等でも動きます。-c
コマンドは後ろに続く文字列をevalして実行するため、2つ受け取った引数を順に当てはめてmv
を実行します。
参考
xargsでサクッと書く
https://qiita.com/knknkn1162/items/806604341508d32b160e