ファイル名の一括変更がうまくいかないとき|確かめる順番
ファイル名の一括変更を走らせたのに、フォルダが中途半端な状態で止まっている。こういうとき、いちばん高くつく動きは、設定を少しだけ変えてもう一度走らせることです。すでに一部が変わった集合に同じ規則をもう一度かけると、あとから原因をたどれない状態ができあがります。確かめる順番をあらかじめ決めておけば、たいていは最初の2つで終わります。
直す前に、いまがどの状態なのかを1つに決める
フォルダを見て、新しい名前になっているファイルが何件あるかだけを答えます。ここで状態が4つに割れて、それぞれ見るべき場所が変わります。
- 1件も変わっていない。操作がファイルシステムまで届いていません。道具が動いていないか、境界で断られています。名前の規則の話はまだ関係がありません
- 一部だけ変わった。動いて途中で止まっています。残ったファイルの共通点が、そのまま原因の名前になります
- 全部変わったが、中身が違う。動作は成功していて、規則が意図と違っただけです。4つの中で唯一、もう一度走らせることが答えの一部になります
- 全部正しく変わったのに、別のものが動かなくなった。変更そのものは問題なく、その名前を覚えていた側が置いていかれています。フォルダを見ても何も分かりません
この分類を先に固定する理由は、再実行の危険が状態によって違うからです。一部だけ変わった状態で同じ規則をかけ直すと、すでに接頭辞が付いたファイルにもう1つ接頭辞が付き、連番は途中から振り直されます。元の名前を知っている人がいなくなった時点で、手作業の復旧すら難しくなります。やり直すなら、先に取り消すか、まだ古い名前のままのファイルだけを選び直してからにします。
変わった件数を数えると、原因の半分は消える
1件も変わっていないときに真っ先に疑うのは、名前の規則ではなく、対象が画面で見ているものと違っていた可能性です。
検索結果の窓で選んだ場合、その選択はいくつものフォルダをまたいでいます。フォルダを選んで中身が対象になると思って実行すると、変わるのはフォルダ自身の名前だけです。窓を1回クリックしただけでは何も選ばれていませんし、別の場所へ移動した時点で選択は解除されます。
数えるのは一瞬です。Finderの名称変更のパネルには、これから変わる件数が書かれています。窓の下のステータスバーにも選択件数が出ます。表示されていないときは、メニューの「表示」から出せます。ターミナルなら、実行の前に対象を数える1行を通します。
ls IMG_*.JPG | wc -l
この数が頭の中の数と違うなら、そこで止めます。正しい規則が誤った40件に完璧にかかった結果と、何も実行されなかった結果は、見た目がまったく同じです。
道具の側が触れないだけのことがある
対象が合っていて、それでも何も起きないとき。次に疑うのはファイルでもフォルダでもなく、名前を変えようとしているアプリが、その場所に触れる許可を持っているかどうかです。
App Store経由で配布されるアプリはサンドボックスの中で動くため、利用者が場所を渡すまでフォルダに手が届きません。Renamerの案内にも、App Store版はmacOSのセキュリティ要件により名前の変更の許可を求めると書かれています。何週間も前に、別のフォルダで一度閉じてしまった確認の窓は、今日はもう出てきません。アプリは何もせず、何も言いません。
見る場所は3つあり、それぞれ別の設定です。「プライバシーとセキュリティ」の「ファイルとフォルダ」はアプリごとのデスクトップ・書類・ダウンロード・外部ボリュームへの許可、「フルディスクアクセス」はそれ以外まで届く広い許可、「オートメーション」はアプリが別のアプリを操作してよいかどうかです。ショートカットやAppleScriptを使った一括変更が沈黙するのは、たいてい3つ目です。命令は走り、Finderが断り、失敗は画面に出ません。
道具によっては、この状態を先に見せてくれます。NameChangerは権限が無くて名前を変えられないファイルの行を灰色にするので、実行を押す前に分かります。表示してくれない道具のときは、デスクトップに新しいフォルダを作り、対象のうち2件をコピーして同じ規則をかけるのが最短です。コピーで成功するなら、原因は規則ではなく許可の側にあります。
日本語の名前は、開けるのに検索では当たらないことがある
置換の検索文字列に間違いが無いのに1件も当たらない。日本語の名前を扱っているなら、濁点と半濁点の持ち方が原因のことがあります。
「ダ」という文字の持ち方には2通りあります。1文字として持つ形と、「タ」と濁点の2文字に分けて持つ形です。画面ではどちらも同じに見えます。APFSはこの違いを区別せずにファイルを見つけるので、分かれた形で保存された名前でも、まとまった形で普通に開けます。実際に分かれた形で作ったファイルは、まとまった形の名前で存在を確認できます。
問題は、名前の中の文字として探したときです。分かれた形で保存された名前に対して、まとまった形の「ダ」で文字列検索をかけると、1件も当たりません。ファイルは開けるのに検索では当たらない、という食い違いがここで生まれます。
分かれた形の名前が入ってくる経路は限られています。古い圧縮ファイルから取り出したもの、Windowsや他のシステムを経由して届いたもの、一部の同期の経路を通ったものです。見分けたいときは、置換の検索フィールドに手で打ち込むのをやめて、対象のファイル名から該当部分をコピーして貼り付けます。これで当たるなら、原因は文字の持ち方です。正規表現が使える道具なら、濁点を含む部分を任意の1文字から2文字として書くと、どちらの形でも拾えます。
名前の形そのもので弾かれている場合
実行はされているのに一部のファイルだけ受け付けられないとき、名前として成立していない可能性があります。使えない文字は公開されています。
数字と、ほとんどの記号を使用できます。コロン(:)は使用できません。また、ピリオド(.)で始まる名前は付けられません。一部のアプリでは、ファイル名に半角のスラッシュ(/)を使用できないこともあります。 出典: support.apple.com
長さの上限もあります。APFSでは1つの名前が255文字で止まります。長い案件名を接頭辞として足す規則は、もともと名前が長いファイル、つまり整理がいちばん必要だったファイルの上で失敗します。
拡張子の扱いも見落とされます。Finderは拡張子を別の項目のように見せますが、実体は同じ名前の末尾です。置換の対象文字列がたまたま拡張子にも含まれていれば、そこも書き換わります。しかもファイルごとに拡張子を隠す印が付けられるため、名前が変わっていないように見えて末尾だけ変わっていることも、その逆も起きます。一括で何かをする前に、Finderの設定で「すべてのファイル名拡張子を表示」を入れておくと、この誤診が丸ごと消えます。
途中で止まったなら、残った分だけを取り出す
一部だけ変わったときは、変わらなかった側を正確に取り出すのが先です。実行の前後で一覧を保存して比べるだけで済みます。
ls > /tmp/before.txt
ls > /tmp/after.txt
comm -12 /tmp/before.txt /tmp/after.txt
両方の一覧に出てくる名前が、変わらなかったファイルそのものです。窓を上から下まで見ていくより速く、見落としもありません。
そのうえで、残った側の共通点を見ます。雲の印が付いているなら、実体がこのMacに無い状態です。名前を変える前に本体を取り寄せる動きが入るので、件数が多いとそこで止まります。いちばん長い名前ばかり残っているなら上限です。同じ接頭辞のものだけ残っているなら、新しい名前が衝突しています。残り方に規則性が無く散らばっているときは、たいてい同期の途中のファイルです。
元に戻せる時間は、どこで実行したかで決まる
取り消しの効き方は、道具ごとにまったく違います。Finderでの一括変更はCommand+Zで戻せますが、効くのはそのFinderのセッションが続いているあいだだけで、戻るのは1件ずつではなく実行した束ごとです。有料の名前変更アプリの多くは独自の取り消し履歴を持っていて、もう少し長く残ります。ターミナルには何も残りません。
とくに注意が要るのは、ターミナルで名前が衝突したときの挙動です。Finderは同じ名前になる変更を止めて知らせますが、素のmvは確認もゴミ箱も通さずに上書きします。-nを付けると上書きを拒否するようになり、zmvの-nは実行する予定の全行を表示して何もしません。走らせる前に結果を読む手段は、どの経路にも用意されています。
そして、実行の前に古い名前の一覧をファイルへ書き出しておけば、取り消しの有無に関係なく手で戻せます。コマンドは1行です。この1行があるかどうかで、失敗したときの費用が数十分と数時間に分かれます。
名前は正しく変わったのに、別のものが動かなくなった
4つ目の状態は、フォルダを見ているかぎり永久に分かりません。名前の変更そのものは成功していて、その名前を覚えていた側が取り残されています。数時間後、あるいは数日後に、別の場所で失敗として現れます。
エイリアスは比較的よく生き残ります。macOSは場所だけでなく識別子でもファイルを追いかけるためです。一方、シンボリックリンクは文字列としての場所をそのまま持っているので、名前が変われば行き先を失います。写真や設計のアプリが持っている目録も同じで、アプリ側の再リンクの機能で直すことになり、Finderでいくら操作しても解決しません。共有リンクのうち場所を鍵にしているものは、開けなくなります。台本の中に直接書かれた場所は、次にその処理が走った瞬間に失敗します。
対策は2つで足ります。1つは、他から参照されているフォルダの名前を変える前に、そのフォルダを使っている側で古い名前を検索しておくこと。もう1つは、変更の直後に検索結果へ古い名前が残っていても、数分は判断を保留することです。索引の更新が追いついていないだけで、放っておけば揃います。
同じ確認を何回くり返しているかを数える
ここまでの切り分けを振り返ると、実際に手を動かした場所が見えてきます。フォルダの窓で件数を数え、ターミナルで一覧を書き出して差分を取り、設定の窓で許可を確かめ、また最初の窓に戻る。原因の特定にかかった時間の多くは、判断ではなく移動に使われています。フォルダとターミナルとAIが同じ窓にある状態なら、一覧を取る、差分を出す、残りだけを選び直すまでが同じ場所で終わります。
どの経路に取り消しの履歴と事前の確認があるのかは、道具の作りによって決まります。標準機能と他のファイル管理の道具が、どこまでを持っていてどこから先を持っていないかは他のファイル管理との比較で整理しています。名前を付け直したあとに別のデバイスから続きを確認したい場合の考え方はiPhone・iPadから続きをにまとまっています。同じ場所で詰まる人が繰り返し聞く点はよくある質問に集めてあります。
最後に順番だけ残しておきます。件数を数える、結果を先に読む、コピーで試す、差分で残りを特定する、許可を見る、参照している側を探す。上の2つで終わる日がほとんどで、下まで降りる日は月に何度もありません。
よくある質問
一括変更を実行しても1件も名前が変わりません。最初に何を見ればよいですか?
名前の規則ではなく、対象の件数から確かめます。名称変更のパネルに出る件数と、窓の下のステータスバーの選択件数が、意図した数と合っているかを見ます。件数が正しいのに何も起きないときは、アプリがその場所に触れる許可を持っているかを「プライバシーとセキュリティ」で確認します。
置換の文字列は合っているのに1件も当たらないのはなぜですか?
日本語の濁点や半濁点が、1文字ではなく2文字に分かれて保存されている場合があります。この状態でも開くことはできますが、名前の中の文字として検索すると当たりません。検索フィールドに手で打ち込まず、ファイル名から該当部分をコピーして貼り付けると判別できます。
一部のファイルだけ変わらなかったとき、どれが残ったか早く知る方法はありますか?
実行の前後でlsの結果をファイルに書き出し、comm -12で両方に出てくる名前を取り出します。その一覧が変わらなかったファイルです。残った側の共通点が、実体が手元に無い、名前が長すぎる、名前が衝突している、のどれなのかを教えてくれます。
ターミナルで名前を変えたあとに元へ戻す方法はありますか?
ターミナルには取り消しの履歴が残らないため、戻す手段は事前に取った古い名前の一覧だけです。実行前にlsの出力をファイルへ保存しておけば、あとから手で戻せます。上書きの事故を避けたいときはmvに-nを付け、実行予定を先に見たいときはzmvの-nを使います。