batch rename files macを戻せる形で実行する手順
batch rename files macで調べて出てくる手順は、どれも操作の説明で終わります。選んで右クリックして「名称変更」を選び、3つの欄を埋める。覚えるのに15秒もかかりません。難しいのはその先で、400件のファイルに同じ間違った接頭辞が入ったあと、どこまで戻せるのかを知らないまま画面を見ている時間のほうです。この記事では、実行前に結果を確かめる方法、戻すための記録の残し方、取り消しが効く範囲、その名前を指している別のものの扱い、実行後の確認までを順に整理します。
一括変更で怖いのは、同じ間違いが全件に入ること
1件を間違えれば、その場で気づきます。400件を同じ規則で間違えると、フォルダは一見して整って見えます。すべての名前が互いに揃っているためで、揃えることこそが目的だったのだから当然です。
起きる失敗は3つの型に分かれます。
- 意図より広く当たる。「2025」を「2026」に置き換えると、取引先名や請求番号やバージョン表記の中の同じ並びまで書き換わる。Finderの置換は単語の区切りを見ない
- 名前がぶつかる。置き換えた結果2件が同じ名前になると、同じフォルダには置けない。Finderは止まって知らせるが、ターミナルの
mvは黙って上書きし、消えたほうはゴミ箱にも残らない - 選択の範囲が想定と違う。検索結果の窓で選ぶと、複数のフォルダにまたがったまま一括変更が走る
3つ目は特に見落とされます。名称変更のパネルに出る件数が、これから変わるファイルの数を示す唯一の確認材料です。毎回そこを読んでから実行するだけで、範囲の事故はほぼ防げます。
実行前に結果を見る方法が3つある
どの経路にも、走らせる前に結果を確かめる手段が用意されています。どれも数秒で済みます。
Finderの名称変更パネルには、下部に変換例が1行出ます。選択の先頭にある実際のファイル名を使って組み立てられ、欄を打つたびに更新されます。その行が想定と違うなら、まだ何も起きていません。
コマンドで進めるなら、zshの zmv に空打ちの指定があります。autoload -U zmv を読み込んだうえで zmv -n '(*).txt' '$1.md' と書くと、実行される予定の組み合わせだけが並び、ファイルには手が加わりません。試した規則と、試していない規則の違いはここに出ます。
3つ目はどの道具でも使えます。Command+Dでフォルダを複製し、複製のほうで一括変更を走らせて結果を見て、要らないほうを捨てます。書類のフォルダなら数分のディスク容量で済みます。動画のように1件が大きい素材では現実的ではないため、その場合は前の2つに寄せます。
変更前の名前を書き出しておく
アプリの取り消しは寿命が短く、書き出したテキストは残ります。必要なのは1行です。
cd ~/Documents/invoices
ls > ../before.txt
元に戻す作業まで見据えるなら、一覧ではなく対応表の形にしておきます。実行前に走らせておくと、あとから旧名と新名を突き合わせる土台になります。
for f in *; do printf '%s\t%s\n' "$f" "$f"; done > ../names-before.tsv
この記録の価値は、アプリを終了しても、Macを再起動しても、1週間後に気づいても残る点にあります。書き出せるのは実行前だけで、あとから作る機会はありません。名前が消えたあとには、記録する材料そのものが無いためです。カメラから取り込んだ写真やダウンロードしたファイルでは、元の名前が入手元をたどれる唯一の手掛かりになっていることもあります。
取り消しが効く範囲は、思っているより狭い
Finderの一括変更は取り消しに対応しています。直後にCommand+Zを押せば、その回に変えた名前がまとめて戻ります。ほかのフォルダを見に行ったあとでも効きます。効かなくなるのは、Finderを再起動したとき、ログアウトしたとき、そして別の操作を何度も挟んで取り消しの履歴から押し出されたときです。
ほかの経路には同じ仕組みがありません。ターミナルでの改名はファイルシステムの操作そのもので、履歴を持ちません。ショートカットやAutomatorの処理も、内部では同じ操作を呼ぶため同様です。
| 経路 | 取り消し | 名前がぶつかったときの動き |
|---|---|---|
| Finderの名称変更 | Command+Z。Finderの再起動まで | 止まって知らせる |
ターミナルの mv |
無し | 既存のファイルを黙って上書きする |
ターミナルの mv -n |
無し | その1件を飛ばして両方残す |
zshの zmv |
無し | 強制の指定が無ければ実行しない |
| ショートカット・Automator | 無し | 設定した処理の内容による |
この表から実務で引き出せる結論は2つです。ループの中で使う mv には -n を付けること。そして空打ちを省いた zmv は、削除と同じ重さの操作として扱うことです。
取り消しに頼らない前提で組むと、作業の順序が変わります。先に5件だけ実行して結果を見てから残りを流す形にすれば、間違いに気づいた時点で影響を受けているのが5件で済みます。全件を一度に流すのは、5件の確認が終わってからで遅くありません。
その名前を指しているものを先に数える
ファイル名は見出しであると同時に、ほかの何かが記録している値でもあります。名前が変わったとき、指し先が追随するかどうかは仕組みによって違います。
| 名前を指しているもの | 改名後も追随するか | 理由 |
|---|---|---|
| Finderのエイリアス | する | パスに加えてファイルの識別子を持っている |
| シンボリックリンク | しない | パスの文字列だけを持っている |
| 最近使った項目 | おおむねする | 識別子から解決できる形で記録されている |
| 書類の中の相対リンク | しない | Markdownや表計算は文字列として保持している |
| Gitの管理下 | する | 内容の一致から改名として検出される |
| 写真アプリや音楽アプリのライブラリ | しない | ライブラリの内部で改名すると目録と食い違う |
| パスで管理するバックアップ | 別物として扱われる | 新しいファイルとして再度コピーされる |
| クラウド同期のフォルダ | する | 件数分の変更として同期される |
| Spotlightの索引 | する | 自動で更新される。即時ではない |
事前に見ておく価値があるのは下の2行です。同期フォルダの中で数千件を改名すると、同じ数の変更が同期の待ち行列に積まれます。ほかの作業がそのフォルダに依存していない時間帯を選ぶほうが安全です。写真アプリのライブラリのように、内部に目録を持つ入れ物の中身は、Finderからの改名の対象にしないでください。名前を変えるならアプリの側で行います。
通ってしまうが、あとで困る名前
macOSはかなり自由に名前を受け付けます。受け付けることと、渡した先が扱えることは別です。
数字と、ほとんどの記号を使用できます。コロン(:)は使用できません。また、ピリオド(.)で始まる名前は付けられません。 出典: support.apple.com
ここに書かれた2つの制限のほかに、後から効いてくる条件が4つあります。
- ファイル名の上限は255文字。長い名前に長い接頭辞を足すと、途中で失敗する
- 標準のディスクは大文字と小文字を区別しない。
Report.pdfとreport.pdfは別に見えて衝突する - 末尾の半角スペースは受け付けられるが目に見えない。あとからの検索や照合が当たらなくなる
- 全角スペースと丸括弧は、渡す相手によって扱いが変わる。Windowsとの受け渡しでは
? * < > | \が使えない
社外に渡す予定があるファイルは、英数字とハイフンとアンダースコアに寄せておくと、経路を問わず扱えます。日付は年月日を数字で並べる形にしておけば、そのまま名前順で時系列に並ぶため、並び替えのために後日もう一度改名する作業が消えます。
実行したあとに確かめる3つのこと
エラーが出なかったことと、意図どおりに終わったことは違います。確認は3つで足ります。
1つ目は件数です。実行前に400件だったフォルダが実行後も400件なら、上書きは起きていません。減っていれば、その差が失われた件数です。Finderのステータスバーに出る数字か、ls | wc -l で確かめられます。
2つ目は、当たらなかったものの有無です。全件に当てたつもりが一部にしか当たらなかった状態は、全部失敗するよりたちが悪くなります。同じフォルダに2種類の命名が混ざり、次に同じ処理を流したときに、変更済みのものまで対象になるためです。名前順で並べると2つの塊に分かれるので、目で見て分かります。
ls | grep -v '^2026-'
3つ目は、書き出しておいた記録との比較です。前後の一覧を突き合わせれば、変わったものが全部並びます。
ls > ../after.txt
diff ../before.txt ../after.txt
取り消しの期限が切れたあと、何が起きたのかを示せる材料はこの出力だけです。消えた側の行数と増えた側の行数が一致していなければ、その差が衝突した件数で、消えた名前がバックアップから探す対象になります。
この3つを毎回やる必要はありません。件数が10件程度で、目で全部見えるなら1つ目だけで足ります。数百件を超えたときと、規則の中に置換が含まれるときに、3つとも実行する価値が出てきます。判断の基準は件数そのものではなく、目視で全件を確認できるかどうかです。
手順を7段階に固定しておく
道具より順序のほうが効きます。10件でも1万件でも同じです。
- リスト表示でフォルダを開き、ステータスバーの件数を読む
- 変更前の一覧を、そのフォルダの外に書き出す
- 変換例か空打ちで、結果を先に見る
- Commandクリックで5件だけ選び、先に実行する
- その5件を確認する。変わった名前のものを1件混ぜておく
- 残りを実行する
- 件数をもう一度読む。増減が無ければ衝突していない
7番目が、実際にデータを失う失敗を捕まえる工程です。処理の詳しい可否や復旧の考え方はよくある質問に、確認と実行を1つの窓で行う形についてはできることに整理してあります。
確認と実行のあいだで、窓を何回またいでいるか
ここまでの手順には、道具をまたぐ場面が繰り返し出てきます。Finderで件数を読み、ターミナルで空打ちを走らせ、Finderに戻って結果を見て、またターミナルで差分を取る。作業そのものは短いのに、往復が挟まるたびに選び直しと貼り直しが発生します。
フォルダとターミナルとAIが同じ窓にある構成が検討されるのは、この往復を消すためです。一覧で選んだものがそのままコマンドの対象になれば、空打ちも差分の確認も、窓を移らずに続けられます。
判断の材料は単純です。直近に行った一括変更で、Finderとターミナルを何回行き来したかを数えてください。2回か3回で済んでいるなら、この記事の手順を入れるだけで十分に安全になります。それより多いなら、変えるべきなのは手順ではなく、作業をどの窓で完結させるかという配置のほうです。手元を離れたあとで結果だけ確認したい場合の考え方はiPhone・iPadから続きをにあります。
よくある質問
Finderで一括変更した名前は元に戻せますか?
直後にCommand+Zを押せば、その回に変更した分がまとめて戻ります。別のフォルダを見に行ったあとでも効きますが、Finderの再起動やログアウト、ほかの操作を挟みすぎると効かなくなります。ターミナルで実行した改名には取り消しが無いため、実行前に一覧を書き出しておく方法が確実です。
名前がぶつかるとどうなりますか?
Finderは衝突を検出して止まり、どの項目が原因かを知らせます。ターミナルの mv は逆で、既存のファイルを黙って置き換え、置き換えられたほうはゴミ箱にも残りません。mv -n を使うと、衝突した1件を飛ばして両方を残せます。ループで改名するときは付けておくと安全です。
クラウド同期のフォルダで一括変更しても問題ありませんか?
実行はできますが、改名した件数と同じ数の変更が同期に流れます。数千件を一度に変えると同期が長く走り、その間ほかの端末では新旧の名前が混ざって見えることがあります。まだ手元にダウンロードしていないファイルは実体が無いため、道具によっては改名できません。ほかの作業が止まっても困らない時間帯に実行してください。
ファイル名に使わないほうがよい文字はどれですか?
コロンは使えず、ピリオドで始まる名前も付けられません。それ以外では、Windowsや共有ドライブへ渡す可能性があるなら ? * < > | \ を避けてください。末尾の半角スペースは目に見えないうえ、あとからの検索や照合が当たらなくなるため入れないほうが安全です。英数字とハイフンとアンダースコアは、どの経路でも扱えます。