mac 拡張子変更警告は何を守っているのか|切る前に読む
Macでファイルの名前を変えようとすると、2種類の確認が出る。1つは「mac 拡張子変更警告」で調べる人が見ている、拡張子を変えてよいかを聞くもの。もう1つは「“ファイル名”の名前を変更しようとしています」と表示して、操作そのものの許可を求めるものだ。この2つは出どころが違い、守っているものも違い、設定で切れるのは片方だけになる。ここでは、それぞれが何を防いでいるのか、どこで切れるのか、切るとどうなるのかを順に整理する。
拡張子の警告は、実際には何と書いてあるか
この確認の文言はFinder本体のリソースに入っている。拡張子を追加するとき、変更するとき、削除するときで別々の文言が用意されており、日本語版には次の形で収録されている。
拡張子を“^0”から“^1”に変更してもよろしいですか? 変更してしまうと、書類が別のアプリケーションで開かれてしまうことがあります。 出典: macOS の Finder.app に同梱される日本語リソース(apple.com)
^0 と ^1 の部分には、実際の拡張子が差し込まれる。重要なのはボタンの側で、片方は「新しい拡張子を使用」、もう片方は「元の拡張子を保持」という書き方になっている。安全な選択肢がキャンセルの陰に隠れていない点は、この確認の設計として素直だ。
同じ系列にはほかの文言もある。拡張子を削除しようとしたときは削除してよいかを聞く形になり、対象がアプリケーションやフォルダの場合は2行目が「アプリケーションがフォルダのように表示されてしまうことがあります」に変わる。さらに、新しい拡張子にピリオドや空白は含められない、指定した拡張子はシステムだけが使用できる、という2つの文言も用意されている。これらは警告ではなく拒否で、どのボタンを押しても先へは進まない。
拡張子を変えても、ファイルの中身は変わらない
拡張子を変更したとき、ファイルの中身は1バイトも変わらない。変わるのは、macOSがそのファイルをどのアプリで開くかを決める経路のほうだ。macOSは拡張子から書類の種類を判定し、種類ごとに既定のアプリを対応付けている。警告文が「壊れます」ではなく「別のアプリケーションで開かれてしまうことがあります」と書いているのは、そのためだ。
この性質は両方向に効く。動画ファイルの末尾を.txtに変えても映像は無事だが、テキストエディタに渡されて中身が文字化けした記号の羅列に見える。多くの人はこれを見て「ファイルが壊れた」と判断する。逆に、テキストファイルの末尾を.csvに変えても表計算のデータに変換されるわけではないし、フォルダの名前を.appで終わらせてもアプリケーションにはならない。拡張子はラベルであって変換機ではない。
一方で、ラベルが仕事をしている場面もある。拡張子が付いていないファイルは、Macの上では推測で扱われてなんとか開けることがあっても、受け取った相手のWindows機では開くアプリが決まらないことがある。人に渡すファイルに正しい拡張子を付ける作業は、見た目を整えるためではなく、相手の環境で開けるようにするためのものだ。
開くアプリを変えたいだけなら、拡張子は触らない
拡張子を変更しようとする動機の多くは、「このファイルを別のアプリで開きたい」だ。その目的なら拡張子を書き換える必要はない。ファイルを選んで情報を見るのウインドウを開き、このアプリケーションで開くの項目で目的のアプリを選び、すべてを変更のボタンを押せば、同じ種類のファイル全部の既定が入れ替わる。1回だけ別のアプリで開きたいなら、右クリックのメニューから選ぶだけで済む。
この違いは事故の起きやすさに直結する。拡張子を書き換える方法は、ファイルそのものの名前を書き換えて他の環境にも影響を残す。既定のアプリを変える方法は、自分のMacの中の対応付けだけを変える。後者なら、同じファイルを人に渡したときの見え方は変わらない。
「名前を変更しようとしています」は別の確認
もう1つの確認は文言が違う。「“ファイル名”の名前を変更しようとしています」あるいは「3項目の名前を変更しようとしています」と表示され、許可を求めてくる。これは拡張子の警告の言い換えではなく、操作の実行許可を求める確認だ。
同じ系列の文言はFinderのリソースの中に一式そろっている。コピー、移動、ゴミ箱に入れる、即時削除、新しいフォルダの作成、エイリアスの作成、タグの変更、アクセス権の変更。並べてみると共通点がはっきりする。いずれも、キーボードの前にいる人ではなく、別のプログラムがFinderに頼んで実行させる操作だ。自動化のワークフロー、ショートカット、スクリプト、Finderに処理を委ねる種類のユーティリティが、この確認を呼び出す。
ここから2つのことが言える。
- この確認はファイルの危険性ではなく、いま何が動いているかを知らせている。心当たりのない名前変更の許可を求められたら、押す速度を上げるのではなく、常駐しているものと定期実行の設定を確かめる場面だ
- Finderのウインドウで自分の手で名前を変えたときには出ない。頼んだ人と実行する人が同じだからだ
この確認は、Finderの設定から切ることができない。スクリプト経由のファイル操作を見えるようにしておくためのものだからだ。
警告を切る場所と、切ったときに失うもの
拡張子の警告のほうには切り替えがある。Finderの設定を開き、詳細のタブに「拡張子を変更する前に警告を表示」という項目がある。同じタブには「すべてのファイル名拡張子を表示」もあり、ファイルの名前を頻繁に触る人はこちらを先に入れておきたい。
この項目の実体は、Finderの設定領域に書き込まれる FXEnableExtensionChangeWarning という値だ。構成プロファイルや管理ツールから一括で設定できるのはこの値があるためで、ターミナルから書き換えた場合はFinderを再起動しないと反映されない。
切ったときに失うものははっきりしている。200個のスクリーンショットをまとめて名前変更したときに、拡張子ごと消し飛ぶのを止める最後の関門がこの警告だ。Finderの名前変更はCommandとZで取り消せるが、有効なのは直後にそのウインドウで押した場合に限られる。ほかの操作を挟んだあとでは、拡張子を1つずつ付け直すことになる。
現実的な落としどころは、警告は残したまま「すべてのファイル名拡張子を表示」を有効にすることだ。意図しない拡張子の変更の多くは、拡張子が隠れていて見えないまま名前を書き換えたことが原因で起きる。表示さえされていれば、そもそも警告が出る場面が減る。
| 名前の変え方 | 拡張子の警告 | 実行の許可を求められるか | CommandとZで戻せるか |
|---|---|---|---|
| Finderのウインドウで手で変更 | 出る(設定で切れる) | 求められない | 直後なら戻せる |
| Finderの一括変更 | 一括で1回出る | 求められない | 直後なら戻せる |
| スクリプトからFinderに依頼 | 出る(設定で切れる) | 操作ごとに求められる | 戻せない |
| ターミナルのmvコマンド | 出ない | 求められない | 戻せない |
拡張子が隠れているときと、一括変更のとき
拡張子の警告を意図せず呼び出す典型は、拡張子が見えていないファイルの名前を書き換えたときだ。Finderは拡張子をファイル単位で隠せる。情報を見るのウインドウに「拡張子を隠す」のチェックボックスがあり、これが入っていると report.pdf は report として表示される。その表示の上から新しい名前を打ち込めば、システムから見れば拡張子の変更になる。
一括変更では同じ問題が大きくなる。複数のファイルを選んで名前を変更すると、置換、追加、フォーマットの3つのモードを持つ小さなパネルが開く。拡張子に届いてしまうのは置換のモードで、検索する文字列にピリオドや拡張子の一部が含まれていると、名前の途中と同じように拡張子の中でも一致してしまう。
置換の対象を「拡張子の直前まで」に限る指定はパネルに無い。そのため、名前の一部と拡張子の一部が同じ文字列になっている場合は、置換のモードではなくフォーマットのモードで組み直すほうが安全になる。フォーマットのモードは基準になる名前と連番や日付を組み合わせて付け直す方式で、拡張子には手を出さない。
パネルの下には、変更後の名前の見本が1行表示される。実行前にこの1行を読むことが、唯一にして十分な防御になる。見本が意図と違えば検索文字列を直せばよく、そこには何の代償もない。実行してしまえば、直後の取り消しか、もう一度の一括変更で戻すしかなくなる。
もう1つ、他のOSからファイルを受け取る人に関係する話がある。macOSは拡張子の大文字と小文字を区別せずに扱うので、.JPGと.jpgは同じアプリに渡る。ただしこの寛容さはどこでも同じではなく、Webサーバーは別の名前として扱う。公開前に拡張子を小文字へそろえる一括変更が定番の手順になっているのはこのためだ。
ターミナルは何も聞かない、という前提
ここまでの話はすべてFinderの中の話で、ターミナルには当てはまらない。mvコマンドは何も聞かずに名前を変え、移動先に同名のファイルがあれば何も聞かずに上書きし、拡張子も何も聞かずに変える。上書きの確認だけは-iを付ければ効くが、拡張子についての確認は存在しない。
一括で名前を変えるときに事故を防ぐ習慣は、実行の前に空打ちすることだ。コマンドの前にechoを置くと、実際には何もせずに「これから実行される内容」がすべて表示される。
for f in *.txt; do echo mv "$f" "${f%.txt}.md"; done
上書きを絶対に避けたい場面では-nを付ける方法もある。移動先に同じ名前のファイルがあれば、確認を出さずにその1件だけを実行せずに飛ばす。確認に答えながら進めたいときは-i、止まらずに走らせたいときは-n、という使い分けになる。どちらも付けなければ、既存のファイルは黙って消える。
空打ちの出力を読むのに10秒もかからず、フォルダ全体に及ぶはずだった間違いがここで止まる。echoを外せば本番になる。リポジトリの中ではバージョン管理側の移動コマンドを使うと履歴がつながり、変更を読む人にとって追いやすくなる。
2つの窓に分かれているから、確認が要る
こうして並べると、片方には無いものが片方にはある、という構図が見えてくる。Finderはファイルが何であるかを知っていて、ラベルが中身と食い違う変更の前に手を止める。ターミナルは200個のファイルを1行で処理できるが、その結果が意味を成すかどうかについては何の意見も持たない。
そして実務では両方が要る。日付で並べ替えて中身を見るのはファイルの一覧、規則で名前を付け直すのはシェル、そして結果の確認はまた一覧に戻る。この往復のたびに、どのフォルダの話をしていたのかを人間が覚え直している。フォルダとターミナルとAIが同じ窓にある形なら、見えているファイルに対してそのまま規則を書けるので、往復そのものが減る。何がどこまで同じ窓で完結するかはできることにまとまっており、従来のファイル管理アプリとの構造の違いは他のファイル管理との比較で並べて確認できる。
導入前に細かい前提を確かめたい場合はよくある質問に主な質問と回答が置かれている。どの経路で名前を変えるにせよ、最初に決めるべきことは変わらない。拡張子を表示させておくこと、そして一括の変更には実行前の見本を必ず挟むことだ。
よくある質問
「名前を変更しようとしています」と出るのはなぜですか?
これは拡張子の警告とは別の確認で、キーボードの前にいる人ではなく別のプログラムがFinderに名前変更を頼んだときに出ます。自動化のワークフロー、ショートカット、Finderに処理を委ねるユーティリティなどが該当します。許可すると、その1回の操作だけが実行されます。
拡張子の警告を毎回出さないようにできますか?
Finderの設定を開き、詳細のタブにある「拡張子を変更する前に警告を表示」のチェックを外すと出なくなります。実体は FXEnableExtensionChangeWarning という設定値で、ターミナルや構成プロファイルから変更した場合はFinderを再起動すると反映されます。一括変更の事故を止める最後の関門でもあるため、切るかどうかは慎重に決めてください。
拡張子を変えるとファイルは変換されますか?
されません。中身は1バイトも変わらず、変わるのはmacOSがどのアプリで開くかを決める経路だけです。テキストファイルの末尾を.csvにしても表計算のデータにはならず、動画の末尾を.txtにすればテキストエディタで開いて文字化けして見えます。変換が必要なら、その形式を読み書きできるアプリを使ってください。
拡張子を消してしまったとき、元に戻せますか?
Finderで名前を変えた直後であれば、同じウインドウでCommandとZを押すと取り消せます。一括変更も同じ方法で戻せますが、ほかの操作を挟んだあとでは効きません。その場合は正しい拡張子を手で付け直すことになります。ターミナルのmvコマンドには取り消しの仕組みがないため、実行前に内容を表示して確かめる習慣が有効です。