Automatorのフォルダアクションでネットワークフォルダを監視してファイルを処理する方法

このQ&Aのポイント
  • Automatorを使用して、Mac mini Serverからネットワークフォルダを監視して、条件に合致したファイルが追加されたら自動で処理を実行する方法について説明します。
  • 問題なく動いている場合と失敗する場合で、何が異なるのか調べてみてもPCやネットワークなどの環境は同じ条件だったので原因がわからず、拾いこぼしの原因と対策について相談します。
  • 具体的な手順として、1. Automatorのフォルダアクションで「シェルスクリプトを実行」する設定をし、2. 特定条件に合致するファイルを処理するadd_data2.appを実行する方法を説明します。
回答を見る
  • ベストアンサー

Automatorのフォルダアクションについて

お世話になります。 以前、こちらで「AutomatorのFinder項目のフィルタ適用」というタイトルで相談させていただいた者です。 お蔭様で希望通りの結果を得ることができました。 動作の希望は、Automatorを使用して、Mac mini Serverからネットワークフォルダを監視して、条件に合致したファイルが追加されたら自動で処理を実行したい、というものでした。 ご指導いただいたように下記の手順で設定をして、ほぼ問題なく動いているのですが、週に2回ほどファイルが追加されている場合でも処理が始まらず、手動で作業をすることがあります。 問題なく動いている場合と、失敗する場合で、何が異なるのか調べてみてもPCやネットワークなどの環境は同じ条件だったので原因がわからず、今回相談させていただきました。 手順 1.Automatorのフォルダアクションで「シェルスクリプトを実行」 --------------------------------------------------- 対象のフォルダ:ネットワークフォルダ シェル : usr/bin/ruby 入力の引渡し方法 : 引数として # encoding: utf-8 if RUBY_VERSION < %[1.9.0] require %[jcode] $KCODE=%[utf-8] else Encoding.default_external=%[utf-8] end ARGV.each do |f| if File.basename(f)[/^\d{6}(12|16).*lzh$/] abort %[エラーが発生しました] unless system %[open -W -a add_data2.app #{f}] # データ登録作業 end end --------------------------------------------------- ⇒ 追加ファイルの特定条件   yymmddの後ろの時間を示す数字が「12」か「16」のいずれかで、   拡張子が「lzh」のファイル ⇒ add_data2.app でlzhファイルを別フォルダにコピーや   解凍などの処理を実行 2.add_data2.app 実行 以上です。 拾いこぼしが起きる原因と対策を教えて下さい。 どうぞ宜しくお願い致します。

  • Mac
  • 回答数5
  • ありがとう数1

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

  • ベストアンサー
  • ki073
  • ベストアンサー率77% (491/634)
回答No.3

こんな方法はいかがでしょうか 基本的には今までのようにフォルダアクションとします。取りこぼしが有ったときのためにタイマーあるいは手動での処理を追加します。 ただし、フォルダアクションによって引き渡されるファイルを処理するのではなく、最後に処理したファイルの日時から未処理のものを探し出し、もし未処理のものが有った場合にはそれを処理するようにする。処理対象のファイル名でフォルダアクションが発生したときはそれを処理しますし、取りこぼしがあった時にはそれを探し出して処理されます。 それと、フォルダアクションで渡されるファイル名からフォルダ名を取り出してそれだけを使っています。フォルダ名を別途設定する手間を省いています。 ちょっとプログラムを書いてみました。 # encoding: utf-8 if RUBY_VERSION < %[1.9.0] require %[jcode] $KCODE=%[utf-8] else Encoding.default_external=%[utf-8] end last_file_stamp=%[140628120012].to_i # 最後に処理したファイルのyymmddhhmmssを取り出し整数型に # どのように記録されている分かりませんのでここは書き換えてください。 ARGV.each do |f| folder_name=File.dirname(f) # フォルダアクションで渡されたファイル名からフォルダ名を取り出す lzh_files=Dir.glob(%[#{folder_name}/*.lzh]) # 拡張子がlzhのファイル名 target_files=lzh_files.select{|f| File.basename(f)[/^\d{6}(12|16)\d{4}/]} # 12時と16時台のファイルだけに target_files=target_files.select{|f| File.basename(f)[/^\d{12}/].to_i>last_file_stamp} # 日時でlast_file_stamp以降のファイルだけに target_files=target_files.sort_by{|f| File.basename(f)[/^\d{12}/].to_i} # 日時で並び替え target_files.each do |f| abort %[エラーが発生しました] unless system %[open -W -a add_data2.app #{f}] # データ登録作業 end end ただし、last_file_stamp=の所は書き換えてください。 タイマーあるいは手動での処理の追加ですが、 該当するフォルダにダミーファイルを作ることで強制的にフォルダアクションを発生させるのでいかがでしょうか。 shellだと touch フォルダ名/dummy_file で空のファイルができます。仮にdummy_fileの名前にしていますが、一目で分かる名前がよいと思います。 手動でも良いし、タイマーでファイルを作成するとフォルダアクションが発生しますので、いつでも取り返しができます。

maokongreen
質問者

お礼

ki073様 ちゃんとお礼ができないまま随分時間が経ってしまい、大変失礼しました。 あの後、長期入院して先月退院しました。 体調がだいぶ良くなってきましたので、ki073様に教えていただいたフォルダアクションの続きに取り掛かろうと思います。 ただでさえ知識がないのに、期間が空いてしまったのでほとんど忘れてしまったと思います(泣) 幸いなことに、入院前に、Mac mini Serverを再起動しておいたところ、入院中から最近までずっと取りこぼしなく安定していました。 スクリプトはki073様に前回教えていただいもののままです。 また先日、取りこぼしが出てしまい、それからは全く動いている様子がないのでこの質問で教えていただいた方法に改めて挑戦したいと思っています。 とりあえずお礼をお伝えしたかったので・・・。 ありがとうございましたm(_ _)m

maokongreen
質問者

補足

ki073様、お礼が遅くなってすみません。 お忙しい中、プログラムまで作っていただきましてありがとうございます。 m(_ _)m 私のOS 10.9.3 , ruby 2.0.0 ではなぜか動かないので、明日、会社のPCで試してみたいと思います。 今、私のMacと闘っています。 取り急ぎお礼まで・・・。 本当にありがとうございます m(_ _)m

その他の回答 (4)

  • ki073
  • ベストアンサー率77% (491/634)
回答No.5

簡単にテストしたつもりだったのですが、いろいろ問題が有りそうですね。すみません。 Automatorでのデバック結構大変なのです。 私自身は、ワークフローに変更して、「Finder項目の選択を求める」を最初に入れてやっています。 多分同じことをやっているのだと思います。 >「print」を入れながら確認をしてみたところ それよりも代わりにpを入れる方がいろいろな場合に対応できます。 >ARGV.each do |fn| の部分で、ディレクトリの末尾に「/」が付いていない フォルダアクションの場合にはファイル名が渡されるはずですので、もう一度確認してみてください。 Rubyで大掛かりなソフトを書く時には、Rubyのdebug機能を使うと便利です。Automatorとは離れて作業しなければならないのですが、変数を確認したり、変数を書き換えたりできますので非常に便利です。 この後で、Automatorに組み込んでということをしています。100行くらいのスクリプトが入っているのがあったりします。 今回の場合は、上のような方法(pを付け加える)のが簡単だと思います。

maokongreen
質問者

補足

ki073様 なかなか「できました!」というご報告ができずに申し訳ありません。 Windowsの方が別PCにお引越し後も調子が悪くて、結局新しく購入することになり、今到着待ちです。 受注の方は別のPCにメールで送ってもらったものを手動で処理をしているので、特に問題はない状況です。 早く「p」を入れるデバッグを試してみたいです。 PCが届いて、再度試せるようになりましたら結果をご報告させていただきます。 > フォルダアクションの場合にはファイル名が渡されるはずですので、もう一度確認してみてください。 そうですよね、おっしゃる通りなので私が寝ぼけていたのかも知れません。 すみませんm(_ _)m 次は「p」で確認してみます! では、またご報告にあがります。 取り急ぎお礼まで。。。 ありがとうございましたm(_ _)m

  • ki073
  • ベストアンサー率77% (491/634)
回答No.4

No.3の修正です。 変数fが上書きされる可能性があるので ARGV.each do |fn| folder_name=File.dirname(fn) # フォルダアクションで渡されたファイル名からフォルダ名を取り出す の二カ所のfをfnに Ruby1.8.7(OSX 10.8までで使われているもの)では問題がでると思います。幸い基本的にはARGV.eachは一回しか実行されないので問題が顕在化しなかっただけですが。より新しいバージョンのRubyでは多分問題はないと思われますが、まぎらわしいので修正をしてください。

maokongreen
質問者

補足

ki073様 お礼が遅くなって大変失礼いたしました。 ネットワークフォルダのPCが昨日から起動しなくなり、別のPCにお引越しをしたりバタバタしておりました。 今日の夕方、実際と同じ環境でダミーのフォルダを作成して、教えていただいた方法を試してみたのですが、何も起きませんでした。 AppleScriptのように動きがログに表示されないので、よくわからないのですが、Automatorでデバッグをしながら「結果を表示」というアクションを最後に入れてみたところ、結果は ( "" ) と表示されていました。 「print」を入れながら確認をしてみたところ、 ARGV.each do |fn| の部分で、ディレクトリの末尾に「/」が付いていないため、次の行の folder_name=File.dirname(fn) の部分で、目的のネットワークフォルダが表示されず、1つ上の階層のフォルダが表示されました。 |fn|の後ろにスラッシュを付ける方法がわからなかったので、とりあえず次の行の lzh_files=Dir.glob(%[#{folder_name}/*.lzh]) を lzh_files=Dir.glob("/Volumes/AAA/BBB/*.lzh") としました。 次の「12時と16時台のファイルだけに絞り込む部分」も正しい結果を得られました。 ところが、その次の「日時でlast_file_stamp以降のファイルだけに絞り込む」部分 target_files=target_files.select{|f| File.basename(f)[/^\d{12}/].to_i>last_file_stamp} の結果が該当なしの( "" )となってしまいました。 Finderのファイル名も変更日も「last_file_stamp」のものよりも新しいのですがダメでした。 直接「140702121111」と入れてもダメでした。 上記の動きの確認はAutomatorでのデバッグで、実際のフォルダアクションでは反応がありませんでした。 「日時でlast_file_stamp以降のファイルだけに絞り込む」部分をコメントアウトしてみたらフォルダアクションが反応しました。 その後のApplescriptによる解凍、データ登録の処理で一度エラーを出してしまうとフォルダアクションが無反応になってしまいました。 ちょっと煮詰まってきました・・・。 さっきまで動いていたものが急に動かなくなる不安はなかなかのストレスで、フォルダアクションを外してみたり、Finderを強制終了してみたり、試行錯誤しましたがAutomatorのデバッグ画面のログで「実行中‐シェルスクリプトを実行」のまま動かなくなりました。 ちょっと頭を冷やして、もう一度挑戦してみます。 m(_ _)m

  • ki073
  • ベストアンサー率77% (491/634)
回答No.2

これまでの話でだいぶ理解できているのですが、少し確認を 1) Automatorのスクリプトを実行しているのはMac mini Server(OSX 10.8)ですよね。 2) そのMacからネットワーク経由で見ているyymmdd12mmss○○○.lzhなどのファイルが保存されるサーバーはWindowsなのでしょうか? 3) 処理するyymmdd12mmss○○○.lzhが作られた時だけでなく、.txtなど直接関係のないファイルができた時もフォルダアクションが実行されます。かなり短縮できます。そこまで待てるかどうかです。もし待てないのなら時間を決めて確認するプログラムを実行する必要があります。 >ネットワークフォルダからローカルフォルダにlzhファイルをコピーしてから解凍しているので、解凍されたフォルダ名から最後に処理をしたファイル名の特定はできます。 これを使うのが良さそうですね。

maokongreen
質問者

補足

お世話になっております。 お忙しいところ、ご回答ありがとうございます。 購入したRubyの本を参考に学習を始めましたが、お恥ずかしいことになかなか教えていただいたレベルまでの道のりは遠く、先に進めずにおります。 1) Automatorのスクリプトを実行しているのはMac mini Server(OSX 10.8)ですよね。 ⇒はい、Mac mini ServerのOS10.8です。 2) そのMacからネットワーク経由で見ているyymmdd12mmss○○○.lzhなどのファイルが保存されるサーバーはWindowsなのでしょうか? ⇒はい、Windows XPです。 3) 処理するyymmdd12mmss○○○.lzhが作られた時だけでなく、.txtなど直接関係のないファイルができた時もフォルダアクションが実行されます。かなり短縮できます。そこまで待てるかどうかです。もし待てないのなら時間を決めて確認するプログラムを実行する必要があります。 ⇒.txtなど直接関係のないファイルが追加されるタイミングも日々バラバラで、1時間に1つも作成されない場合もあり、次のファイルが作成されるまで待つことは難しい状況です。 やはり時間を決めて確認をするしかなさそうですね。 最初はその方法でやっていたのですが、作成される時間がバラバラのため、自動で監視をする方法をこちらでご指導いただいた、という経緯でした。 もうちょっと悩んでみて、手も足も出なければ時間を決めて確認する方法に戻すか、取りこぼしの発生した時は手動で動かすか、どちらかにしようと思います。 融通のきかない環境のため、すばらしいご提案をたくさんいただいたのに実践できずに申し訳ありません。 取り急ぎお礼まで。 ありがとうございましたm(_ _)m

  • ki073
  • ベストアンサー率77% (491/634)
回答No.1

フォルダアクションの仕組みがよくわからないので、根本的な解決方法は分からないのですが、 取りこぼしがあっても、フォルダアクションが動作した時に、直前にチェックしたファイルより後に作成されたファイル(取りこぼしがあったときには複数になる)についてチェックするということでいかがでしょうか? そのようにすると、処理が抜けても次のフォルダアクションで挽回できます。 どこまで処理が済んでいるのか覚えておく必要があるのと、未処理のファイルを探す手段が必要です。 1) 最後に処理したファイル名(日付時刻がファイル名で分かる?)からそれ以降に作られたファイルが特定できたり、 2) ファイルの修正時間が記録されていますがそれが信頼できるなら、(こちらの方が簡単そう) その情報を頼りに未処理のファイルを特定できますでしょうか? 上のような方法でできそうな気がします。自力で解決が無理でしたら書き込んでください。

maokongreen
質問者

補足

ki073様お世話になっております。 またまた躓いてしまい、相談させていただきました。 宜しくお願い致します。 月曜から金曜まで毎日12時と16時に処理を実行していて、12時台で取りこぼしがあった場合にも16時まで待つことはできないので、今は目で確認しながら、取りこぼしが発生した時には手動で動かしています。 受注データなので、次の処理まで待つ余裕がなく、すぐに処理に回さないといけないのです。。。 1) 最後に処理したファイル名(日付時刻がファイル名で分かる?)からそれ以降に作られたファイルが特定できたり、  ⇒処理に必要なファイルは「yymmdd12mmss○○○.lzh」で、   時間帯の部分が「12」か「16」のファイルの2つだけです。   他に10時台のファイルや、.txtファイルも作成されます。   1日の最後に処理をするファイル名は「yymmdd16mmss○○○.lzh」なので、処理以降に作成されたファイルの特定は可能です。 2) ファイルの修正時間が記録されていますがそれが信頼できるなら、(こちらの方が簡単そう) その情報を頼りに未処理のファイルを特定できますでしょうか?  ⇒修正時間というのは、Finderに表示されている「変更日」のことですか?   圧縮ファイルの中身を編集はしないので、変更日から未処理のファイルを特定するとしたら、「変更日の最新のもの」かつ、時間帯が「12」か「16」で拡張子が「lzh」のもの、という条件になるとお思います。 あとは、ネットワークフォルダからローカルフォルダにlzhファイルをコピーしてから解凍しているので、解凍されたフォルダ名から最後に処理をしたファイル名の特定はできます。 もう少し自力で悩んでみます。 ありがとうございましたm(_ _)m

関連するQ&A

  • フォルダアクションが動作しません

    macminiserver:SnoLeopard(OS X 10.6)使用 Automatorにてフォルダアクションのワークフロー(下記)を 作成しました。 1)次の場所に追加された… :NAS上のフォルダA 2)指定されたFinder項目を取得:フォルダAに生成されるファイルB(csvファイル) 3)シェルスクリプトを実行   シェル:/bin/bash 入力の引き渡し方法:引数として   mv /Volumes/フォルダA/ファイルB.csv /Liblary/フォルダC(移行先) (実施したい内容) ファイルBがフォルダA上に作成されたらフォルダCに移動させる(上書き) なお、ファイルBは元々Windowsのソフトで作成されたcsvファイルを Macに対応できるようExcelVBAを使用して文字コードをUTF-8に変換したものです。 このフォルダアクションですが、Autometorの設定画面から実行すると 正常に動作するのですが、フォルダAにファイルBが作成されても フォルダアクションの動作をしてくれません。 NASのフォルダAはマウント済です。 フォルダAに対しての関連付けもしております。 他に設定などが必要なのでしょうか。 解決策を教えて頂けると嬉しいです。 よろしくお願い致します。 ※当方、Mac初心者で知識があまりありません… 噛み砕いた回答を頂けると助かります。

    • ベストアンサー
    • Mac
  • Automatorのシェルスクリプトがエラーの場合

    以前こちらで教えていただいた方法で、Automatorのフォルダアクションのシェルスクリプトによるファイルのコピーを利用しています。 その節はお世話になりましてありがとうございました。 今回相談にのっていただきたいのは、下記のスクリプトでフォルダAにあるファイルをWindows7の中のiCloud Driveにコピーしているのですが、コピーできない時が何度かありました。 原因はWindows7との接続が切れてしまったからなのか、他に原因があるのかわかりませんでした。 そこで、コピーに失敗した場合にその原因をメールで通知することは可能でしょうか? 普段はモニターをつけていないので、メールが届いたらチェックすることができて便利なのですが、ネットで検索してもそのものズバリの解決策は見つけられませんでした。 もしメールでの通知が難しそうであれば、エラーのログを残すなどの方法でも構いませんので、ご指導をよろしくお願いします。 Automatorは下記のような設定です。 1. 指定されたFinder項目を取得(Automatorでのテスト用に設定) 2. フォルダの内容を取得 3.シェルスクリプトを実行 ======================================== #!/bin/bash path=$1 folderC=/Volumes/iCloudDrive cp "${path}" "${folderC}"/ ======================================== Mac OS X 10.8.5 よろしくお願いします。

    • ベストアンサー
    • Mac
  • osx automator 定期実行のスクリプト

    osxのautomatorで定期実行のスクリプトを作りたいです。 1時間置きに指定したフォルダにある複数のファイルが対象です。 どうすればいいでしょうか、全て教えてください。

    • 締切済み
    • Mac
  • Automatorが失敗する原因

    お世話になります。 Mac購入からまだ日が浅く、Automatorの勉強も始めたばかりですが、下記の処理をAutomatorのカレンダーアラームに登録をして、問題なく処理を完了する場合と、途中で失敗する場合があります。 Macそのものの環境は同じだと思いますので、スクリプトの書き方などに問題があるのではないかと思っています。 処理の順番は、以下の通りです。 1.「シェルスクリプトを実行」 ファイル名が日付で毎日変動するファイルを検索 2.「Finder項目をコピー」 特定のフォルダにコピーをして 3.「変数の値を設定」 ファイルのパスを扱うために設定 4.「AppleScriptを実行」       a. ファイルのパスからファイル名を抽出      b. FileMakerの特定のフィールドにその値をセット      c. ファイルの解凍 今はエラーを再現できないのですが、本日2回ほど失敗した時は1~3までの工程は問題なかったようで、ファイルのコピーまではできていました。 エラーの内容はうろ覚えですが、「スクリプトを確認して下さい」のような文言だったと思います。 4.の「AppleScriptを実行」のa.に関してはダイアログなどを出していないのでできているのか不明ですが、b.の部分はできていなかったので、恐らく、b.のところで止まってしまったように思います。 事前にFileMakerのウインドウが前面に来るようにはしてあるのですが・・・。 漠然とした相談で申し訳ありませんが、何かご存知でしたら教えて下さい。 宜しくお願い致します。

    • ベストアンサー
    • Mac
  • Automatorで指定フォルダに複数ファイル振分

    複数のPDFファイル(50枚程度)を 下記の条件で一括操作したいと思っています。 環境 Mac OS X 10.6.8です デフォルトで搭載のAutomator使用 ・日付を追加 ・既存フォルダにそれぞれ振分 例)A.pdf→2014_0613_A.pdf→Aフォルダ   B.pdf→2014_0613_B.pdf→Bフォルダ ※ファイル名はアタリです 日付は追加することができ、振り分けの方は 単純に「項目を検索→項目を移動」を50件位作れば 自動で振り分けられると思ったのですが、 毎回Aがある、という代物ではなく、ない時はエラーになってしまいました。 そこで、エラーが出ない方法、 もしくは効率的に作るアクションや、スクリプトなど 簡単に振り分けられる方法があればお教え願いたいです。 よろしくお願いします。

    • 締切済み
    • Mac
  • フォルダ内の古いファイルを自動で削除する方法

    Macの特定のフォルダ内に保存されているファイルで、追加日から3日以上経過しているものを自動で削除したいのですが、良い方法を教えてください。 保存フォルダ内にはサブフォルダがいくつかあり、Automatorで試したところ、フォルダ内のファイルは削除できましたが、フォルダ自体は削除されずに残ってしまいました。 Automatorでフォルダごと削除する方法があれば教えてください。 他の方法でも構いませんので、ご指導宜しくお願いします。

    • 締切済み
    • Mac
  • Automatorでファイルの移動とコピー

    Automatorのフォルダアクションを使ってファイルを2ヶ所のフォルダにコピーしたいのですが、うまくいきません。 フォルダAに保存されたPDFをフォルダBの日付フォルダ(フォルダ名:yy-mm-dd)に移動して、次にフォルダCにコピーをすることが目的です。 ネットの情報を参考にしながら下記のようなワークフローを作成しました。 AutomatorのフォルダアクションでフォルダAを指定 1. 指定されたFinder項目を取得(Automatorでのテスト用に設定) 2. フォルダの内容を取得 3. 変数の値を取得   変数名:folderA 4. AppleScriptを実行  on run {input, parameters}   set folderA to item 1 of input    -- POSIX変換   set folderA_POSIX to POSIX path of folderA   -- 移動先   set folderB to "フォルダBのパス"    -- フォルダBの中の日付名のサブフォルダ   set theTime to do shell script "date +'%y-%m-%d'"    -- フォルダB / yymmdd のパス   set yymmdd to do shell script "find " & folderB & " -name " & theTime & "* -print"   set moveCommand to "mv " & quoted form of folderA_POSIX & " " & quoted form of yymmdd   do shell script moveCommand   return input end run Finder項目をコピー      フォルダCを指定 一応、上記の流れで動いているのですが、このワークフローと同じ内容で別のフォルダ用にコピーをしたところ、「AppleScriptを実行」の結果に移動先のフォルダBのyy-mm-ddフォルダに保存されたファイルのパスが表示されず、最初のフォルダAのパスが入っていて、テストの結果のログの部分には、「アクション”Finder項目をコピー”に必要なデータがありません」とありました。 ワークフローをコピーする前のちゃんと結果を得られている方のフォルダでは、移動先のパスが結果に表示されていたので、最後の return input の値が更新されていないのかな?と想像しているのですが、どうしたら良いですか? 「Finder項目をコピー」にデータを引き渡すことができない原因はなんでしょうか? 同じスクリプトで問題なく動いているフォルダもあるのですが、違いは何でしょうか? アクセス権はいずれも同じ設定(読み書きOK)になっています。 そもそも上記のようなスクリプトで問題ないでしょうか? Macもまだ慣れず、AutomatorもAppleScriptも知識がないのでとんちんかんな質問でしたら申し訳ありませんが、ご指導よろしくお願い致します。

    • ベストアンサー
    • Mac
  • AutomatorのFinder項目のフィルタ適用

    お世話になります。 以前、こちらで「Automatorで変数を使ったファイル検索」というタイトルで相談させていただいて、お陰様で希望通りの結果を得ることができました。 http://okwave.jp/qa/q8563519.html 前回相談させていただいた時は、Automatorを使って特定の時間に、流動的なファイル名のフォルダを別のフォルダにコピーをしたい、という内容が目的でした。 今回はこれまでと状況が変わり、特定の時間では対応できなくなってしまったので、Automatorで特定のフォルダを監視しつつ、特定の条件を満たすファイル(流動的なファル名)が作成された時点でコピーの処理を実行したいのですが、「Finder項目にフィルタを適用」の部分でつまづいています。 検索したいファイル名は、12時台に作成される 「yymmdd12○○○.csv」と、 16時台に作成される「yymmdd16○○○.csv」というファイル名です。 監視するフォルダにはこのcsvファイル以外にも毎日複数のファイルが作成されています。 Automatorでは以下のように試してみました。 1. 指定されたFinder項目を取得 2. フォルダの内容を取得 3. 変数の値を設定     変数名:今日の日付     カスタムフォーマット:yymmdd 4. Finder項目にフィルタを適用 4. のフィルタの部分で、ファイル名に「12時台」を示す文字列を付与した「yymmdd15」というキーワードで検索をしたいのですが、フィルタの設定ではどのようにしたらよいのかわかりません。 そもそもフィルタの適用の設定で、変数を使うことはできないのですか? 12時台と16時台の2つの条件を設定するのは難易度が高そうなので、16時台の方は今までのやり方でAutomatorで指定の時間に処理を実行する方法でも構いません。 Finder項目にフィルタを適用する際に、変数を使用する方法を教えて下さい。 もしそれが不可能でしたら、他にどのような方法がありますか? ご指導よろしくお願いします。

    • ベストアンサー
    • Mac
  • Automatorで変数を使ったファイル検索

    Automatorを使って、毎日決まった時間にファイルのコピーをしたいのですが、手順がいまいちわからないので教えて下さい。 ファイル名は「当日の日付+15+文字列」で、日付の部分が変動します。 そこで、Automatorの「日付と時刻」変数から、必要な形式yymmddとなるように変数を作成しました。 変数名は「folderName」としました。 1)この変数はいつでも呼び出せるように保存するにはどうしたらよいですか? Automatorのカレンダーアラームで、以下のようにワークフロー(?)を作りました。 ------------------------- ・変数の値を取得   →上記のyymmddとなる日付 ・Finder項目を検索   →検索条件 「名前」 が 「folderName」 を含む    変数名は手で入力しました ・フォルダの内容を取得 ・Finder項目をコピー ------------------------- 一連の動作を確認すると、以下のようなログが残っていました。 ・変数の値を取得  完了 ・Finder項目を検索  完了 ・フォルダの内容を取得  完了 -1warning  アクション”フォルダの内容を取得”に必要なデータがありません。 ・Finder項目をコピー  完了 -1warning  アクション”Finder項目をコピー”に必要なデータがありません。 2)検索するファイル名のところに、手打ちで変数名を入れたことが間違っているように思うのですが、変数名はどのようにして指定したらよいですか? 初歩的な質問かと思いますが、ご指導宜しくお願いします。

    • ベストアンサー
    • Mac
  • Objective-CのNSTaskからAutomatorで作成したア

    Objective-CのNSTaskからAutomatorで作成したアプリを複数回実行するとフリーズするのですが、原因が分からないのでアドバイスをいただきたく書き込みさせていただきます。 Automatorの処理は、「イメージファイルにサムネールアイコンを追加」するだけの処理です。1度の実行で複数枚の画像を1枚ずつAutomatorに渡して処理を行います。 Automatorの実行は以下のような内容で実行しています。 -(BOOL)imageIcon(NSString *)filePath // 画像ファイルパス { NSTask *task = [[NSTask alloc]init]; NSURL *urlfilePath = [NSURL fileURLWithPath:filePath]; NSString *Command = [NSString stringWithFormat:@"/usr/bin/open"]; NSArray *argumets = [NSArray arrayWithObjects:@"-a", @"Automatorアプリのパス", [NSString stringWithFormat:@"%@",urlfilePath], nil]; [task setLaunchPath:Command]; [task setArguments:argumets]; [task launch]; [task waitUntilExit]; // 処理が完了していないのに処理を継続するのを防ぐ為、sleep [NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:3]]; if([self processList:@"Automatorアプリ名"]){ //psコマンドを実行して、処理中ならYESを返す。 [NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:3]]; } [task release]; return YES; } 上記の関数を各画像の処理時に呼び出しています。 上記の関数の先頭部にreturn YESで強制的に処理をすると、フリーズは発生しません。 また、フリーズした時は、Automatorアプリが実行中のままとなりますが、アクテビティモニタで見るとAutomatorアプリはありません。 Xcodeのコンソールにも、何も表示はありません。 説明がまとまっていなくてすいません。 どなたか、Objective-Cに精通されておられるかたおられまいたら、アドバイスをお願い致します。