• ベストアンサー

特定のフォルダ内のファイルをゴミ箱へ

環境はiBOOK G4 OS10.4.9です。 PagesenderというFAX機能のアプリケーションを 使用しているのですが、FAXを受信するたびに 特定のフォルダ内にファイルが作成されます。 ある時、何気にそのフォルダを開いてみたら 数千というファイルが出来ており、びっくりしました。 そのほとんどのファイルが必要ない物でしたのでゴミ箱に 入れたのですが、数が数だけにその作業も結構時間がかかり、 「特定フォルダ内のファイルを作成日より数ヶ月後に自動的に ゴミ箱に移動できないか」と思いました。 前から気になっていたapple scriptで上記の作業はできるのでしょうか。できるようでしたら、この機会にapple scriptを勉強したいので 参考になるサイトがあればお教えください。よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • sevenless
  • ベストアンサー率66% (374/561)
回答No.2

こんなのはどうですか? set File_List to {} set Target_Folder to choose folder set Seconds_since_creation to 86400 tell application "Finder" set File_List to entire contents of Target_Folder repeat with i from 1 to count of File_List if ((current date) - (creation date of item i of File_List)) > Seconds_since_creation then delete item i of File_List end if end repeat end tell 実行するとフォルダ選択のダイアログが出て、そのフォルダの中にある作成後24時間以上経過したファイルが全てゴミ箱行きになります。経過時間はSeconds_since_creation に秒数で指定してください。フォルダ名をあらかじめ特定したスクリプトを起動項目に入れておけば、起動する度にフォルダが掃除されます。cron を使って定期実行することも可能です。 ちなみに Hazel という PreferencePane を使っても条件にマッチするファイルを定期的にゴミ箱に移動したりできます。 http://www.noodlesoft.com/hazel.php

pekochanno1
質問者

お礼

ご回答有難うございます。 全くの素人なのでみても分からないのですが、 使えそうな気がします。 多分フォルダ名を記入するのだと思いますが、 どこに追記するのでしょうか。 またcron を使って定期実行も興味があります。 お時間があれば引き続きよろしくお願いいたします。

その他の回答 (10)

noname#164148
noname#164148
回答No.11

まず、以下の説明はAppleScriptではありません。ターミナルを使ったシェルスクリプトの説明に近い物です。 また、作成日と変更日が違っていて、どうしても作成日のファイルが対象ならば、以下の説明は無駄です。 find /Library/Logs/Console/501/ -mtime +4 -delete このコマンドは変更日が4日以上前のコンソールログを削除します。 ですので「/Library/Logs/Console/501/」の部分をPagesenderがファイルを作るフォルダに変更し、-mtime +4の「4」を24時間単位で希望の整数にすることで、指定したフォルダ内にある変更日が一定期日より前のファイルが削除できます。 アプリケーション->ユーティリティ->ターミナルを開いて 1.cd /etc/とタイプします。 2.sudo nano daily.localとタイプします。 最初にsudoコマンドを使用する場合は、3行か4行の警告が表示され、その下に「Password:」と表示されます。この「Password:」に続けてpekochanno1さんのログインパスワードをタイプします。 3.開いた画面に上記のfindの例をコピー&ペーストしてから、左右の矢印キーで移動し、「/Library/Logs/Console/501/」の部分をPagesenderがファイルを作るフォルダに変更(UNIX形式で記述)し、-mtime +4の「4」を24時間単位で希望の整数にします。 4.コントロールキー+oキー(アルファベットのオー)を押し、コントロールキー+x(アルファベットのエックス)を押します。 5.これで「/etc/」というフォルダに「daily.local」というファイルができているはずです。「ls -l /etc/daily.local」とタイプすると、ファイルができているかどうかが確認できます。 以上で、Mac OS Xが一日に一回行う(はずの)メンテナンススクリプトの実行とともに、Pagesenderがファイルを作るフォルダの中にある、変更日が一定期間より前のファイルは削除されます。 ちなみに、「(はずの)」と書いたのは、状況によってはメンテナンススクリプトが一日に一回ではないタイミングに行われる場合があるという意味です。 cronを使った定期実行はMac OS X Tiger(10.4.x)以降、Launchdと呼ばれるものに置き換えられました。cronタブの編集等をしなくても、上記だけで定期実行ができるようになっています。

  • sevenless
  • ベストアンサー率66% (374/561)
回答No.10

なるほど。それもそうですね。 > この「2ヶ月」とか「2週間」を変数や計算式で指定できたら便利なのですが。 > そんな機能を拡張するPlug-inなどがあっても良さそう。 については、 http://web.mac.com/johancarlsson/Site/Actions.html (スマートフォルダの内容を取得するアクション) を使えば可能です。 スマートフォルダならば、特定フォルダの中の任意の日数、週数、月数、年数以内に作成されたファイルを選び出すことができます。でもやはり任意の日数「以前」に作成されたものだけ集めるのはできないんですよね。

  • chieffish
  • ベストアンサー率44% (1149/2554)
回答No.9

「回答者同士のやりとり」になりそうですが・・・ >検索条件として「作成日」が指定の期日「より前」にすれば は指定の期日が固定されるので書き換えないといけないような気がします。 フォルダの中の、作成日が2ヶ月以内のファイルを別のフォルダに退避させて 元フォルダの中身をゴミ箱に入れ、退避させていたファイルを戻す。 しか無さそうに思います。 この「2ヶ月」とか「2週間」を変数や計算式で指定できたら便利なのですが。 そんな機能を拡張するPlug-inなどがあっても良さそう。 また、実際にアプリにしてログイン項目に入れてみましたが、起動中にイライラ する人には向いていないですね。 なお、予めお断りしておきますが、私はAuotmatorは5回くらいしか使ったこと無いです(;_;)

  • sevenless
  • ベストアンサー率66% (374/561)
回答No.8

OS 10.5.2 ではエラーが出て実行できなかったのですが、別の OS 10.4.11 マシンで試したところ「Finder 項目を検索」→「ゴミ箱に入れる」のワークフローで Automator を使った自動化が可能でした。ということで、OS 10.4.9 でも可能かもしれません。 「Finder 項目の検索」で対象フォルダを指定し、検索条件として「作成日」が指定の期日「より前」にすれば、お望みのことができると思います。なぜか OS 10.5.2 の Automator では日付「以前」「以後」の設定だとエラーが出ます。「2ヶ月以内」とか「2週間以内」などなら実行が可能なのですが。

  • chieffish
  • ベストアンサー率44% (1149/2554)
回答No.7

2ヶ月以前ならAuotmatorだけでもできそう。

  • sevenless
  • ベストアンサー率66% (374/561)
回答No.6

「Auotmator だけではできない」というのは質問者さんの「Automatorで細かな設定ができるのでしょうか。」という補足質問にたいする直接の回答だと思いますが。質問者さんがみすみす無駄な試行錯誤をするのを見逃すわけにもいきませんから。 > 逃げを打つのなら、AppleScriptを書いて、それをAutomatorのアクションに取り込むほうに、走りますよ。 それが無意味なことはお分かりですよね。

  • harawo
  • ベストアンサー率58% (3742/6450)
回答No.5

> というか、時間があっても Automator だけでは不可能ですよね。 OKWaveの「禁止事項」より抜粋: ■回答ではない回答 質問と関係ない内容や雑談、便乗した質問、回答者同士のやりとりや議論、個人的なメッセージなど、質問に対する回答として成立しない内容を回答欄に投稿することは、ご遠慮ください。 ということで、回答に対する批判、評価は、ご遠慮ください。 世の中、なにごとも妥協は避けて通れません。100%希望どおりのことを実現するために、長時間の学習を行うのか、そこそこで妥協して、短時間で実現するかの選択は、各自の判断にまかせるべきです。 すくなくとも、返答に窮して、逃げを打ったような印象を与える表現は、いただけません。 逃げを打つのなら、AppleScriptを書いて、それをAutomatorのアクションに取り込むほうに、走りますよ。

  • sevenless
  • ベストアンサー率66% (374/561)
回答No.4

> そういう時間はありません。 というか、時間があっても Automator だけでは不可能ですよね。そもそものリクエストが「特定フォルダ内のファイルを作成日より数ヶ月後に自動的に ゴミ箱に移動できないか」というものですから、それに合う解決法を示された方がいいと思いますよ。 > 多分フォルダ名を記入するのだと思いますが、どこに追記するのでしょうか。 choose folder の代わりに alias "Macintosh HD:Users:user_name:Faxes:" などとしてください。"" の中は対象フォルダのフルパス名です。フォルダ名の区切りと最後に : を付けるのと最初に alias を付ける点に気をつけてください。 > またcron を使って定期実行も興味があります。 これはスクリプトを実行用アプリケーションとしてセーブしておき、ターミナルで crontab というコマンドを使って実行条件を設定します。これは UNIX の話になるので、ここで一から説明するのは無理があります。ある程度 AppleScript や UINX コマンドを試してみて、基本が理解できた上でまだ不明な点があれば改めて質問してください。

  • harawo
  • ベストアンサー率58% (3742/6450)
回答No.3

> お時間がありましたら引き続きよろしくお願いいたします。 そういう時間はありません。 AppleScriptをこれから勉強したいという意欲があるかたが、それでは困ります。一を聞いて十を知る姿勢で、臨んでいただきたいと思います。 試行錯誤で、いろいろ応用にチャレンジしてはいかがですか?

  • harawo
  • ベストアンサー率58% (3742/6450)
回答No.1

AppleScriptでもできますが、Automatorでワークフローを作るほうがかんたんで、しかも高速です。 (1) アプリケーションフォルダにある「Automator」を起動します。 (2) 左側の「ライブラリ」リストの、Finderをクリックします。 (3) 「アクション」リストから「指定された Finder 項目を取得」を探しだし、右側のブランクのスペース(ワークフロー)にドラッグします。「+」ボタンを押して、オープンダイアログを開き、対象のフォルダを選択し、登録します。 (4) 「アクション」リストから「フォルダの内容を取得」を探しだし、ワークフローにドラッグします。なお、ワークフローは、上から順番に実行されるので、ドラッグする位置を間違えないようにしてください。 必要に応じて「見つかった各フォルダからも取得する」のチェックを入れます。 (5) 「アクション」リストから「ゴミ箱に入れる」を探しだし、ワークフローにドラッグします。 (6) 右上の「実行」ボタンを押して、間違いなく実行されるか試験します。 (7) ファイルメニュー「保存」を選びます。「フォーマット:」を「アプリケーションにして、保存します。 (8) システム環境設定>アカウント>ログイン項目を開いて、今作成したAutomatorアプリケーションを登録します。iBookを起動するたびに、自動で実行してくれるようになります。 Automatorには、ゴミ箱を空にするアクションがありません。おそらく危険度が高いので、作らなかったのでしょう。じっさい、目的以外のファイル・フォルダを削除してしまう可能性が高いので、ゴミ箱は手動で空にするほうがいいと思います。

pekochanno1
質問者

お礼

ご回答有難うございます。 Automatorも使ってみたいと思っていたのですが触らずにいた代物です。 アドバイス通りしてみたら確かにゴミ箱に移動できるのですが、実際 フォルダ内には捨てたくないファイルもあります。作成後約1ヶ月後 ぐらいに必要なくなるのでAutomatorで細かな設定ができるのでしょうか。お時間がありましたら引き続きよろしくお願いいたします。