重複ファイル 削除 するとどうなるか|参照・同期・空き容量

重複ファイル 削除 するとどうなるのかを先に知っておきたい、という調べ方は正しい順番です。同じ中身のファイルが2つ並んでいても、片方を消したときに起きることは一定ではありません。何事もなく容量だけが戻る場合もあれば、別のアプリが開けなくなる場合も、同じアカウントでつないだ全部の端末から消える場合もあります。分かれ目は、その1本が「どこから指されているか」と「どこに置かれているか」の2点です。

消したときの結果は、指し方によって3通りに分かれる

同じ中身のファイルが2つあるように見えても、内部での結び付き方には種類があります。片方を消したときの結果は、この種類で決まります。

  • エイリアスを消した場合。エイリアスは本体の場所を指す小さな印なので、消えるのは印だけです。本体はそのまま残り、容量もほとんど戻りません
  • シンボリックリンクを消した場合。これも実体を持たない印なので、結果はエイリアスと同じです。逆に本体のほうを消すと、リンクは行き先を失って開けなくなります
  • ハードリンクを消した場合。2つの名前が同じ実体を指しているので、片方を消してももう片方から普通に開けます。容量も戻りません

この3つは、どれも「消しても本体は残る」という点で共通しています。つまり、重複を減らしたつもりで印だけを消している状態が起こり得ます。作業のあとで容量を測り直して数字が動いていなかった場合、まずこの可能性を疑うと原因が早く分かります。

見分け方は、ターミナルで ls -li を使う方法が確実です。行の先頭に出る番号が実体の識別子で、この番号が一致していればハードリンクです。

ls -li big.bin hard.bin
513570627 -rw-------  2 admin  wheel  20971520  9  5 13:24 big.bin
513570627 -rw-------  2 admin  wheel  20971520  9  5 13:24 hard.bin

番号の右にある「2」は、この実体を指している名前が2つあるという意味です。この数字が1になるまで、実体は残り続けます。Finderの一覧では、この3つはどれも普通のファイルと同じ顔で並びます。重複を検出する道具の一覧に出てきた項目が、実は本体を指す印だったという取り違えは、ここから起きます。

同期しているフォルダで消すと、ほかの端末からも消える

置き場所による違いのほうが、結果は重くなります。デスクトップと書類フォルダをiCloudに預けている場合、そこにある重複を消す操作は、手元の1台だけの操作ではありません。Appleの説明は、この波及をはっきり書いています。

重要: iCloud.comでiCloud Driveからファイルを削除すると、iCloud Driveがオンになっているすべてのデバイスからも削除されます。 出典: support.apple.com

方向は逆でも同じです。Macで消せばiPhoneからも消えます。同じ仕組みは他社の同期サービスにもあり、共有フォルダの中で消した場合は、共有相手の画面からも消えます。自分の整理のつもりだった操作が、相手の作業中のファイルを取り上げることになります。

同期の対象になっているかどうかは、Finderのサイドバーでどのフォルダに置かれているかを見れば分かります。判断が付かないときは、消す前に同期を一時的に止めてから作業する方法もありますが、止めている間に別の端末で編集が起きると衝突します。共有フォルダの中身については、消す前に一声かけるほうが結局は速く終わります。

アプリが管理しているライブラリの中は直接触らない

写真とミュージックのライブラリは、見た目こそフォルダですが、中身の一覧と実体の対応をアプリ側が持っています。ここに重複検出の道具をかけると、同じ画像が何枚も並んで見えます。実際には元画像と編集後の版、サムネイル、書き出しの控えといった役割の違うファイルが混ざっています。

これをFinderやコマンドから直接消すと、アプリ側の一覧には項目が残ったまま、実体だけが無くなります。開こうとした時点で初めて失敗が表面化するので、いつ消したものが原因なのかを後から追いにくくなります。写真の重複を減らしたいなら、アプリの中の機能を使って統合するのが安全です。

メールの添付ファイルとメッセージの受信データも同じ構造です。アプリのサポートフォルダの中で同じ添付が複数見つかるのは、複数のメールに同じファイルが付いているためで、重複ではありません。片方を消すと、そのメールの添付だけが開けなくなります。

判別の目安は、そのフォルダをFinderでダブルクリックしたときの動きです。フォルダとして開かず、アプリが起動して中身を表示するなら、それはアプリが管理している入れ物です。ライブラリという名前が付いた項目、拡張子が .photoslibrary.tvlibrary の項目がこれに当たります。重複検出の道具にかける範囲を決めるときは、この種の入れ物を丸ごと対象から外しておくと、後から追いにくい不具合を持ち込まずに済みます。

空きが戻るのは、最後にそのファイルを開いていたプロセスが終わってから

削除したのに空き容量が変わらない、という現象には、あまり知られていない原因があります。そのファイルを開いたままのプログラムが動いていると、名前が消えても実体は解放されません。

300MBのファイルを開いた状態のまま削除して、空き容量の変化を追うと動きがはっきり出ます。削除した直後の空きは増えず、そのファイルを開いていたプロセスが終了した時点で、およそ290MBがまとめて戻ります。動画の書き出し、大きなログを開いたままのエディタ、データベースを抱えたアプリなどで起きます。

握っているプロセスを確かめる書き方は次のとおりです。

sudo lsof +L1

出てくる行が、名前を持たないまま実体だけが残っているファイルです。該当するアプリを終了させれば領域は戻ります。書き出しの途中で作られる一時ファイルもここに出るので、作業中のアプリを閉じてから測り直すのが確実です。空きが増えないからといって削除に失敗したと考えて、同じ作業を繰り返す必要はありません。掃除のあとに再起動を勧める記事が多いのは、この状態を一括で解消できるからですが、原因のアプリが分かっているなら、そのアプリを閉じるだけで済みます。

戻せる期限は、消し方と置き場所で変わる

「戻せるかどうか」は一つの答えになりません。経路ごとに条件が違います。

消し方 戻す手段 戻せなくなる条件
Finderからゴミ箱へ 「戻す」で元の場所へ ゴミ箱を空にした時点
ターミナルの rm 標準の手段は無い 実行した時点
iCloud上のファイル 「最近削除した項目」から復元 30日の経過
写真のライブラリ アプリ内の「最近削除した項目」 同じく期限の経過
バックアップがある場合 復元 直近のバックアップより後に作ったもの

iCloudの側の期限については、Appleが具体的な日数を示しています。

iCloud Driveから削除したファイルは、30日以内であれば復旧できます。30日の期間が経過する前にファイルを完全に削除することもできます。 出典: support.apple.com

表で目を引くのは2行目です。ターミナルの rm には、ゴミ箱に相当する猶予がありません。重複の整理を自動化しようとしてスクリプトを書いた場合、この違いを意識せずに rm を使うと、判定を1つ間違えただけで取り返しがつかなくなります。整理のスクリプトでは、消す代わりに _trash のような別のフォルダへ動かして、中身を目で確かめてから消す形にしておくと安全です。

外付けやネットワーク越しのボリュームでは、猶予が変わる

同じ「ゴミ箱へ入れる」操作でも、対象が置かれているボリュームによって挙動が変わります。内蔵のディスクなら、消した項目はそのディスク上の不可視のフォルダへ移るだけで、実体は残ります。外付けのディスクも、書き込みができる形式であれば同じようにそのディスク側へ移ります。取り外す前にゴミ箱を空にしていないと、外付けの容量が減ったままになるのはこのためです。

ネットワーク越しに接続した共有ボリュームは事情が違います。この種のボリュームでは、ゴミ箱に相当する置き場所が用意されておらず、削除の操作をした時点で確認の表示が出て、そのまま消えることがあります。社内のファイルサーバーやNASに置いた重複を整理する場面は、この条件に当たります。手元のMacと同じ感覚で「あとでゴミ箱から戻せばいい」と考えていると、戻す先そのものが存在しません。

読み取り専用でマウントされているボリュームでは、そもそも削除ができません。ディスクイメージを開いたままになっている場合や、バックアップのボリュームを開いている場合が該当します。消せないという表示が出たときは、権限の問題より先に、いまどのボリュームを見ているのかを確かめると原因が早く分かります。

消す前に、その1本を指しているものを数える

ここまでの話をまとめると、消してよいかどうかの判断に必要なのは、中身が同じかどうかではなく、そのファイルが何から参照されているかです。参照を数える手段は、種類ごとに分かれます。

  • シンボリックリンクを探す。find ~/work -type l -lname '*target.psd*' で、その名前を指すリンクが出てきます
  • 文章やコードからの参照を探す。grep -rl "target.psd" ~/work で、パスを書き込んでいるファイルが分かります
  • いま開かれているかを確かめる。lsof "/path/to/target.psd" で、握っているアプリの名前が出ます

3つとも結果がゼロなら、消したときに壊れるものは手元にありません。逆に、制作物の中に相対パスで書き込まれている場合は、名前や置き場所を動かした時点でリンクが切れます。ウェブの素材、動画編集のプロジェクト、原稿から呼んでいる図版は、この型に当たります。

参照の数え方を1回決めてしまえば、次からは同じ3つを流すだけになります。重複の判定そのものより、この確認のほうが判断に効きます。

3つの結果を残しておくと、あとで役に立ちます。消す予定の一覧に、参照の件数を書き足した列を1つ加えるだけで構いません。件数がゼロの行から順に消していけば、影響の小さいものから片付く順番になります。後日「あのファイルはどうしたか」と聞かれたときも、その一覧が答えになります。整理の作業でいちばん厄介なのは、消したこと自体ではなく、何を消したか分からなくなることです。

判断に必要な材料が、別々の窓に置かれている

消してよいかを決めるまでに、実際には3つの画面を行き来しています。重複の一覧を見る画面、参照を数えるターミナル、そして本当に同じ中身かを目で確かめるプレビューです。判断そのものは数秒で済むのに、材料を集めるために切り替えが挟まります。

対象が100件を超えたあたりから、この切り替えが作業時間の大半になります。1件ごとに一覧へ戻り、パスをコピーし、ターミナルへ貼り、結果を見てまた一覧へ戻る。判断の質を上げたいなら、判断の材料を増やすより、材料が1か所に並ぶ状態を作るほうが効きます。フォルダとターミナルとAIが同じ窓にある作りは、この往復を前提から外すための形です。

同じ窓で何ができるのかはできることに整理してあります。手元の道具と比べるときの観点は他のファイル管理との比較にまとめてあり、導入前に条件を確かめたい場合はよくある質問が判断の材料になります。

よくある質問

重複を消したのに空き容量が増えません。失敗しているのでしょうか?

削除自体は成功していることが多いです。そのファイルを開いたままのアプリが動いていると、名前が消えても領域は戻りません。該当するアプリを終了させると、まとめて戻ります。ターミナルで sudo lsof +L1 を実行すると、どのプロセスが握っているかを確かめられます。

iCloudに置いているファイルを消すと、iPhoneからも消えますか?

消えます。同じアカウントでiCloud Driveを有効にしている端末はすべて同じ状態に揃うため、Macで消した結果がiPhoneやiPadにも反映されます。30日以内であれば復元できますが、期限を過ぎると戻せません。共有フォルダの中では、共有相手の画面からも消えます。

重複検出の一覧に出てきた項目を、全部消しても大丈夫ですか?

一覧には、本体を指す印や、アプリが管理しているライブラリの中身が混ざっていることがあります。前者を消しても容量はほとんど戻らず、後者を直接消すとアプリ側で開けなくなります。件数が多いときは、まず置き場所ごとに分けて、アプリが管理している範囲を対象から外してください。

ターミナルで消したファイルは戻せますか?

rm にはゴミ箱に相当する猶予がありません。実行した時点で標準の復元手段は無くなり、頼れるのはバックアップからの復元だけになります。整理をスクリプトで自動化する場合は、消す代わりに一時的なフォルダへ移す形にして、中身を確かめてから削除する手順に分けるのが安全です。

記事一覧へ戻る