ダウンロードフォルダの整理がうまくいかないとき|確かめる順番
自動で片付くはずのダウンロードフォルダに、今日も同じファイルが残っています。規則は作った、設定画面では有効になっている、でもファイルは動かない。ダウンロードフォルダの整理 fuguai と調べる人が知りたいのは原因の一覧ではなく、どこから確かめれば最短でたどり着けるかという順番です。この手の不具合は、原因が散らばっているように見えて、実際には数箇所に固まります。上から順に潰していけば、たいてい3番目までで当たります。
最初に、動かないの中身を3つに分ける
「動かない」と一言で言っても、実際には性質の違う3つの状態が混ざっています。
- 規則がそもそも走っていない
- 走ったが、条件に当てはまるファイルが無いと判定された
- 条件には当たったが、移動や改名に失敗した
この3つは調べる場所が違います。走っていないなら常駐と権限を、条件に当たらないなら判定の材料を、失敗しているならファイルの状態と移動先を見ます。先に切り分けないまま設定画面の条件をいじると、直っていないのに条件だけ複雑になり、後で何が効いているのか分からなくなります。
切り分けの一番早い方法は、確実に条件に当たるファイルを1つ作って置くことです。移動先も条件も自分で分かっているファイルなら、動かなかったときに「条件の問題ではない」と言い切れます。テスト用の小さなファイルを ~/Downloads に作り、それが動くかどうかを見る。ここで動けば1番目は消え、動かなければ2番目と3番目が消えます。
段階1 規則が走っているかを見る
走っていない原因で多いのは、常駐する側が起動していないことです。到着に反応する形は、監視する仕組みが動いていて初めて機能します。ログアウトや再起動のあと、ログイン項目から外れていれば、設定画面の条件が有効に見えていても何も起きません。
自分で作った常駐の設定なら、読み込まれているかを一覧で確認できます。
launchctl list | grep <ラベルの一部>
一覧に出てこなければ読み込まれていません。出ていても、最後の終了コードがゼロ以外であれば、走ったうえで失敗しています。標準のフォルダアクションを使っている場合は、フォルダを副ボタンでクリックして表示されるメニューから設定を開き、そのフォルダに対してアクションが有効になっているかを見ます。アクション自体は保存されていても、フォルダへの割り当てが外れていることがあります。
システムのログにも痕跡が残ります。動いたはずの時刻の前後を絞って読むと、走った形跡が無いのか、走って落ちたのかが分かります。
log show --last 2h --predicate 'eventMessage CONTAINS "Downloads"'
ここまでで動いた形跡が見つからないなら、原因は設定ではなく起動です。条件はいじらずに次へ進みます。
段階2 見ているフォルダが違う
走っているのに何も起きない場合、監視している場所が想定と違うことがあります。よくあるのは次の3つです。
~/Downloadsではなく、同じ名前の別フォルダを指定している- エイリアスやシンボリックリンク越しに指定していて、実体をたどれていない
- 外付けやネットワーク上のボリュームを指定していて、接続されていない時刻に走っている
指定先が実体かどうかは、パスの先頭にある記号で判断が変わります。Appleのユーザガイドは、パスの書き方をこう説明しています。
ユーザごとのホームフォルダを示すには、ティルダ(~)を入力します。「書類」、「ミュージック」、「ピクチャ」など、ほとんどの個人用フォルダは、ユーザごとのホームフォルダにあります。 出典: support.apple.com
チルダはログインしているユーザーのホームに展開されます。常駐の設定ファイルや、別のユーザーとして走る仕組みの中では、この展開が効かないか、別のユーザーのホームに展開されます。設定の中では絶対パスで書いておくと、この種のずれが起きません。
実体かどうかは1行で確かめられます。
ls -ld ~/Downloads
先頭が l で始まり、矢印の後ろに別のパスが出るなら、そこはリンクです。整理の規則がリンクを追わない作りだと、中身を見ないまま終わります。
段階3 権限で止まっている
macOSは、ユーザーの書類やデスクトップ、そして外部から取得したファイルが入る領域について、アプリごとにアクセスの可否を管理しています。ダウンロードフォルダを読み書きする処理は、最初に実行された時点で確認のダイアログが出ますが、これを見落としているか、その時に拒否している場合があります。
確認する場所はシステム設定のプライバシーとセキュリティです。フルディスクアクセスの一覧に、整理を担っているアプリや、スクリプトを走らせている親プロセスが入っているかを見ます。ここで見落としやすいのが、スクリプトそのものではなく、それを起動している側に権限が要るという点です。ターミナルから手で走らせると成功するのに、自動実行では失敗する。この症状が出たら、ほぼこの段階が原因です。
もう1つ、アプリが配布の形によってできることが制限される場合があります。サンドボックスの中で動くアプリは、ユーザーが明示的に選んだフォルダ以外へ自由に書き込めません。設定画面でフォルダを選び直すと動き出すのは、その選択自体が許可の付与になっているためです。同じ理由で、フォルダを一度削除して作り直すと、それまでの許可が外れて動かなくなることがあります。
段階4 条件に当たっていない
ここまでで走っていることが確認できたなら、次は判定の材料です。当たらない原因は、ほぼ次の4つに収まります。
- 日付の種類を取り違えている。ダウンロードしたファイルの変更日はサーバー側の最終更新日であることが多く、到着した順とは一致しない。到着順で絞りたいなら追加日を使う
- 拡張子の大文字小文字。
.JPGと.jpgを別物として扱う条件になっていると、片方だけが残る - 種類の判定が拡張子ではなくUTIで行われている。拡張子が無いファイルや、中身と拡張子が食い違うファイルは想定と違う種類に入る
- ダウンロードの途中だった。ブラウザは書き込み中のファイルに
.crdownloadや.downloadのような一時的な名前を付け、完了してから本来の名前に変える
4つ目は、到着に反応する形で特に起きます。増えた瞬間に反応した規則が、まだ中身の揃っていないファイルを見て、条件に当たらないと判定して終わります。その後で本来の名前に変わっても、それは新しい到着として扱われないことがあります。対策は、到着から一定時間が経ったものだけを対象にする条件を足すか、時刻で動く形に切り替えるかのどちらかです。
条件が当たるかどうかは、1つのファイルについて手で確かめられます。追加日と取得元は索引から読めます。
mdls -name kMDItemDateAdded -name kMDItemWhereFroms ~/Downloads/対象のファイル
ここで出た値と、規則に書いた条件を並べて見比べる。この突き合わせを飛ばして条件を書き換え続けると、直った理由が分からないまま次の不具合に進みます。
段階5 当たったが移動できない
条件には当たっているのに結果が変わらない場合、移動の側で失敗しています。原因は5つほどです。
- 移動先に同じ名前のファイルがあり、衝突時の動作が「飛ばす」になっている
- ファイルが開かれたまま、あるいはロックされている
- 移動先の書き込み権限が無い、または移動先のフォルダ自体が存在しない
- 外付けのボリュームがその時刻に接続されていない
- 別のボリュームへの移動になっていて、実体のコピーが必要な容量に足りていない
同名の衝突は静かに起きるため、いちばん気づきにくい失敗です。移動先を開いて、同じ名前のファイルがすでにあるかどうかを先に見ます。ロックについては、Finderの情報ウインドウか、次の1行で確認できます。
ls -lO ~/Downloads/対象のファイル
uchg の表示があればロックされています。検疫の印が付いていることもありますが、この印自体は移動を妨げません。開くときの警告と、移動の失敗は別の話です。ここを混同すると、関係のない属性を消して回ることになります。
規則どうしがぶつかっている場合
段階4と段階5のどちらにも当てはまらないのに結果がおかしいときは、規則が複数あって互いに影響している可能性があります。ダウンロードフォルダを扱う設定は増えやすく、気づくと同じフォルダを見ている処理が3つ4つ並んでいることがあります。
起きるのは主に3つの形です。1つ目は、先に走った規則がファイルを別の場所へ動かしてしまい、後の規則が対象を見つけられない形です。設定画面では両方とも有効に見えるのに、後ろ側は毎回何もしません。2つ目は、同じファイルが2つの条件に当たり、両方が処理を試みる形です。片方が移動を終えた直後にもう片方が同じファイルを探し、失敗します。3つ目は、移動先が別の規則の監視対象になっている形です。移動したファイルがそこで再び条件に当たり、さらに別の場所へ動かされます。ファイルが想定より深い階層に入っていたら、この連鎖を疑います。
確かめ方は単純です。同じフォルダを見ている設定を全部いったん止めて、1つだけ有効にして試します。1つずつ戻していけば、どの組み合わせで結果が変わるかが数分で分かります。優先順位を指定できる道具なら、上から順に評価されることを前提に並べ替えます。指定できない場合は、監視対象のフォルダを分けるほうが確実です。
段階6 走る時刻にMacが起きていない
時刻で動く形に切り替えたあとで「たまに走らない」という症状が出たら、この段階です。スリープ中に予定の時刻が過ぎた場合、仕組みによっては起きた直後に遅れて走り、別の仕組みではその回を飛ばします。ふたを閉じて持ち歩く使い方だと、深夜に設定した処理が3日続けて走らないことも起こります。
確かめ方は2つあります。スリープと起動の記録を見るか、処理の中に「走った」という記録を1行書き足しておくかです。後者のほうが確実で、後から原因を追えます。走った記録が無ければ起動の問題、記録はあるのに結果が無ければ条件か移動の問題と、切り分けが一段速くなります。
直したあと、同じ不具合を二度調べないために
原因が分かって直したら、同じ症状が再発したときに最初から調べ直さずに済む形にしておきます。手間の少ない方法は3つです。使い捨てのフォルダで条件を試してから本番のフォルダに適用する。処理の結果を1行ずつ記録に残す。規則を変えた日付をメモに残す。この3つがあるだけで、次に何かが起きたとき、確かめる範囲が「前回変えたところ」に絞れます。
不具合を追う作業そのものも見直す余地があります。この記事の確認は、フォルダを開いて状態を見る、ターミナルで属性を読む、結果を見にフォルダへ戻る、分からない出力をAIに聞く、という往復の連続です。原因が3箇所に散らばっていれば、その往復も3倍になります。
フォルダとターミナルとAIが同じ窓にあるファイル管理アプリでは、一覧で選んだファイルに対してそのままコマンドを打てるので、属性を読む、条件を試す、結果を見る、という短い繰り返しが1つの画面で終わります。どこまでが同じ窓に収まるのかはできることに整理されています。Finderと別のターミナルを並べる形との違いは他のファイル管理との比較、費用の条件は料金で確かめられます。導入時に詰まりやすい点はよくある質問にまとまっています。
確かめる順番を1つだけ覚えるなら、条件をいじる前に「走ったかどうか」を先に見ることです。走っていない規則の条件をどれだけ丁寧に直しても、結果は変わりません。
よくある質問
手で実行すると動くのに、自動実行だと動かないのはなぜ?
権限の持ち主が違うためです。ターミナルから走らせたときはターミナルに与えられた許可が使われますが、自動実行では起動している側のプロセスに許可が必要になります。システム設定のプライバシーとセキュリティで、フルディスクアクセスの一覧に自動実行を担う側が入っているかを確認してください。
ダウンロード途中のファイルが中途半端に処理されるのを止めたい
到着した瞬間に反応する設定が原因です。ブラウザは書き込み中のファイルに一時的な名前を付け、完了後に本来の名前へ変えます。条件に「追加されてから5分以上経過したもの」のような時間の余裕を足すか、時刻で走る形に切り替えると、途中の状態を拾わなくなります。
規則に当てはまるはずのファイルが選ばれないときは何を見る?
そのファイル1つについて、条件の材料を実際に読み出して突き合わせます。ターミナルで mdls -name kMDItemDateAdded を実行すれば追加日が確認できます。変更日で絞る設定になっていると、到着は今日でも日付が数年前のファイルが対象から外れるため、この取り違えが最も多い原因です。
移動されたはずのファイルが移動先にも無い場合は?
同名の衝突で上書きされたか、削除の設定になっている可能性があります。まずゴミ箱を確認し、次に移動先で同じ名前のファイルの追加日を見てください。処理の履歴を残せる道具であれば、その記録が最短の手がかりになります。履歴が無い場合は、移動先を追加日で並べ替えて、該当する時刻の前後を探します。