リモートマシンのファイルを削除

1997.4.17


 これは本来AppleScriptのTipsというわけではありませんが、AppleScriptにも多少関わりがあるので書くことにします。

 ネットワーク上のMacのディスクを共有しているとき、そのディスク上にあるファイルを削除したくなったらどうしますか? おそらくゴミ箱にそのファイルを移動し、「ゴミ箱を空にする」を実行するでしょう。この方法はファイルの数が少なければ全く問題ありません。しかし、ファイル数が多くなった場合、この方法はお奨めできなくなります。

 ローカルファイルをゴミ箱に放り込んだ場合、そのファイルは、実際にはそのファイルの存在するボリュームの「Trash」というフォルダに格納されます。この「Trash」というフォルダは、すべてのボリュームに存在する目に見えないフォルダです。ユーザは一般にその存在を意識することはありません。

 一方、リモートファイルをゴミ箱に入れた場合、そのファイルは、そのファイルの存在するボリュームの「Network Trash Folder」という不可視フォルダに格納されます。つまり形の上では、ローカルファイルをゴミ箱に入れたのと同じことになります。

 問題になるのは、ゴミ箱を空にするときです。「ゴミ箱を空にする」を実行すると、FinderはそのときTrashフォルダおよびNetwork Trash Folderに格納されているすべてのファイルを消去しようとします。ローカルファイルは、アクセスの速いローカルディスクに存在するから別に問題ありません。しかし、リモートファイルをネットワーク経由で一つ一つ検証しながら消去するとなると、非常に時間がかかります。

 試しに、100程のファイルを入れたフォルダをリモートMac(A)に作り、それを複製して、片方を(A)のゴミ箱に放り込みます。もう片方は、ローカルMac(B)でゴミ箱に放り込みましょう。そして、A、B、の順にゴミ箱を空にしてみて下さい。どれくらい違うか分かるはずです。高速なはずのEthernetですら、相当な時間がかかります。ましてやLocalTalkでは、悪い夢でも見ているのではないかと思うくらいに長い長い時間がかかります。

 私はLocalTalkで接続しているときに500程のファイルをこの方法で消そうとして、途中であきらめました。

 この問題の解決法ですが、一番簡単なのは「リモートファイルの存在するボリュームのTrashフォルダに、直接そのファイルを放り込む」ことです。前述の通り、ローカルの場合「Trash」フォルダは不可視ですが、リモートの場合はちゃんと見えています。したがって、リモートファイルをリモートのTrashに直接入れてしまえば、リモートマシンでそのファイルをゴミ箱に入れたのと同じ結果になります。この方法の場合、ゴミ箱を空にするにはAppleScriptを使ってリモートのFinderにempty trash命令を出す必要がありますが、それは簡単なことですからね。他のマシンのことは、そのマシンにまかせるのが一番ということです。

 この方法の欠点は、リモートのボリュームが一番下の部分からマウントされている必要があるということです。Trashフォルダはディスクの第1階層にあるので、それより深い階層のフォルダをボリュームとして共有している場合はこの方法を使うことができません。

 そんなときには、いっそAppleScriptでaliasを指定して、リモートのFinderにそのファイルをdeleteするよう指示した方がいいかもしれません。フォルダのパスさえ分かっていれば、ファイルの指定は簡単にできますからね。

 まあそんなところで、リモートファイルの削除の方法はひと段落なんですが、なぜこんなことをわざわざAppleScriptのTipsで書くのかは、それなりに理由があります。

 AppleScriptでFinderにdelete命令を出すと、Finderは指定されたファイルをゴミ箱に入れます。これは普通の動作ですね。ではファイルの複製をするとき、その複製先に同じ名前のファイルがある場合はどうでしょう。普段は「入れ換えますか」というダイアログが表示され、ユーザがOKを選択するともとのファイルは削除されますよね? 削除されたファイルは、もうどこにもないはずです。ところが、AppleScriptで複製をし、replaceを行うように指示をすると、削除されるはずのファイルはゴミ箱に移動されます。つまり、ユーザは知らないうちに、ファイルをゴミ箱に入れている可能性があるのです。

 これがローカルの場合は問題ないですが、リモートの場合は先に述べたような問題が生じることになります。この問題は「duplicate」命令と「move」命令で起こりますので、Finderでファイルを扱うときには多少注意が必要になります。特にバックアップ用のスクリプトを作っているときには。

 Finderは、AppleScriptで扱うときとユーザが直接扱う場合とで違う動作をする部分があるのがめんどうですね。


Tipsに戻る
AppleScriptのページに戻る
このホームページに関するお問い合わせは、karino@drycarbon.comまで。