AutomatorのFinder項目のフィルタ適用

このQ&Aのポイント
  • Automatorを使って特定のフォルダを監視しつつ、特定の条件を満たすファイルが作成された時にコピーの処理を実行したい
  • 検索したいファイル名は、12時台に作成される「yymmdd12○○○.csv」と、16時台に作成される「yymmdd16○○○.csv」というファイル名
  • フィルタの設定では変数を使うことはできないので、他の方法を探しています
回答を見る
  • ベストアンサー

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
  • 回答数13
  • ありがとう数8

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

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

もっとシンプルにフォルダアクションを # 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 #{f}] # データ登録作業 end end だけでも良さそうですね。 「シェルスクリプトを実行」でシェルを/usr/bin/rubyに。入力の引き渡し方法は「引数として」 これだけで、「指定されたFinder項目を取得」は無しです。 ファイルの取りこぼしがあればadd_data2のドラッグすれば良いので、使うにはこれで十分かも。

maokongreen
質問者

お礼

ki073様 お世話になっております。 ついにできました~~~~~~!!! めちゃくちゃ嬉しいです。 これでファイルができるまでフォルダとにらめっこしなくて済みます。 本当にありがとうございました!!! ki073様のお力がなければ、自分だけでは絶対にたどり着けなかったので、心から感謝しております。 感謝の気持ちが届いているか心配ですが、本当に本当にありがとうございました。 m(_ _)m 職場のPCでばっちり動いたので、午後から早速実際のデータで試運転をしてみようと思います。 なぜか私のMacBook Airでは全く反応しなくなってしまったのですが、私のPCがおかしいのかも知れません。 あと、OS X10.8の方では、add_data2を指定しているところで、「.app」を足さないとだめでした。 無反応になる前のOS X10.9の方では特に必要なかったと思います。 それと、最後にご教示いただいたスクリプトではフォルダへのコピーはしてい様子だったので、add_data2の方で引数を受け取った後に、「Finder項目のコピー」を入れました。 わかりやすい解説付きでしたので、処理の流れがぼんやりとでも理解できて感謝しております。 今回の難題が無事に終わりましたので、Rubyのお勉強に入ろうと思います。 また壁にぶち当たった時はこちらで相談させていただきますので、今後ともご指導宜しくお願い致します。 お世話になりまして、本当にありがとうございました。 m(_ _)m

その他の回答 (12)

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

ちょっと間違いがありました。 あのままだと、その日に最後に作ったファイルがフィルタリングされてしまいます。 ワイルドカードと正規表現の書き方で差があることを勘違いしていました。 単純に、*の前にピリオドが無かったことが原因なのですが、 拡張子がlzhだっと思いますのでそれだけに、後は微妙に改良しています。 puts ARGF.select{|f| File.basename(f)[/^#{today}(12|16).*lzh$/]}.sort[-1] いらぬお世話かもしれませんが、 集計対象となるファイルがさらに増えてきた入りすると、間違いの原因になってくと思います。 1) ファイルを作成する側が、集計対象のファイルが分かっているはずですので、それだけを別のフォルダにコピーしてもらい、そのフォルダに入っているものを集計対象とする。集計が終わるとそのフォルダから消してしまう。 これだとファイルの有無だけを判断すれば良い。 2) 別の方法として、ファイルを決まった題名をつけてメールで送ってもらう。 OSXのmailソフトの機能として、特定の条件のメールでAppleScripで処理する機能があります。 こちらの方がいちいちフォルダをチェックしなくても良いので監視が楽になります。 送る側も自動化するのはそんなに難しくありません。

maokongreen
質問者

お礼

ki073様 お礼が遅くなってすみません。 ご丁寧なご指導をありがとうございますm(_ _)m 昨日から急な出張が入り、今夜帰宅するまで教えていただいた方法を試してみることができません。 すぐに試したくてウズウズしているのですが、帰宅しましたらやってみて、また改めてお礼にうかがいます。 取り急ぎお礼まで。 ありがとうございました。

maokongreen
質問者

補足

ki073様 お世話になっております。 前回に引き続きご指導いただきまして、本当にありがとうございます。 「Finder項目にフィルタを適用」では無理なんですね。 まだ教えていただいたrubyのスクリプトを1つ1つ検索して学習できていなくて、ぼんやりとした流れしか理解できていないのですが、そのまま以下のようにコピペさせていただきました。 -------------------------------------------------- # coding: utf-8 Encoding.default_external=%[utf-8] today=Time.now.strftime(%[%y%m%d]) puts ARGF.select{|f| File.basename(f)[/^#{today}(12|16).*lzh$/]}.sort[-1] --------------------------------------------------- 結果は、 ・私物のMacBook Air OS X10.9 では、バッチリでした!!!  ファイル名をいろいろな日付、時間に変更して試してみましたが、その日の最新の方のファイルが選択され、希望通りの結果を得られました。 ・職場のMac mini OS X10.8 では、「-e:3: uninitialized constant Encoding (NameError)」というエラーが表示されました。 翻訳したら「初期化されていない一定のエンコーディング」と出ました。 うーーん・・・わかりません。 職場のPCで動くようにしたいのですが、どのように変更したらよいでしょうか。 ネットで検索してみましたが、ヒントになりそうなことすらわかりませんでした。 甘えてばかりで恐縮ですが、またお時間がございましたら、引き続きご指導いただけますようお願いいたします。 m(_ _)m

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

質問欄で 1. 指定されたFinder項目を取得 2. フォルダの内容を取得 3. 変数の値を設定 4. Finder項目にフィルタを適用 の場合は4が2と3のデータ2つを受け取らないとフィルタリングできないので無理です。 3と4を一つにして2からだけしかデータを受け取らないようにする必要がありますので、標準のアクションでは無理です。 やり方ですが、前回のやり方を踏襲すると ls /Volumes/○○○/●●●/`date +%y%m%d`{12,16}*.csv なのですが、16時のファイルができていると12時のファイルも一緒に検出されるので、多分スクリプトが正常には動かないと思います。 (2つのファイルが同時に存在すると問題がありそうな) 16時のファイルが存在すると、12時を無視して16時だけ、 12時だけだとそれだけを検出するようなスクリプトを書いてみました。 1. 指定されたFinder項目を取得 2. フォルダの内容を取得 3 以下のスクリプト 同じく、シェルスクリプトを実行ですが、ちょっと複雑そうなのでbashではなくrubyで書いてみました。 シェルを/usr/bin/rubyに変更してください。入力の引き渡し方法はstdinへで変更ありません。 次の行から。一行目の上には、空白行を入れないように # coding: utf-8 Encoding.default_external=%[utf-8] today=Time.now.strftime(%[%y%m%d]) puts ARGF.to_a.select{|f| File.basename(f)[/#{today}(12|16)*.csv/]}.sort[-1] 上の行の(12|16)で12または16であるファイル名をフィルタリングしています。また、sortで並び替え、[-1]で最後の要素1つを出力しています。 ただし、OSX10.9以外はそのままでは動かないように思いますので、もし違うのでしたら書き込んでください。

maokongreen
質問者

お礼

お世話になります。 No.2のご回答でご提案いただきました件についてですが、現在、検索対象のフォルダにはファイルが3,000個ほど保存されています。 毎日だいたい10~20個ずつ増えていくので、ご指摘いただいた点は私も頭の痛いところなのですが、お客様側で作成されたAccessによるシステムがインストールされており、そのAccessでの処理後にlzhフォルダが作成されています。 こちらからお客様に (1) と (2) のお願いすることは難しい関係でして・・・。 (Accessのシステムを作った従業員の方は退職されてしまったのでいじれない、というお話しをチラッと聞いたことがあります。) 当社のPCにインストールされているので、先方の了解が得られればこちらで修正させていただくことは可能かも知れません。 上司がそれを問い合わせてくれるかどうか、そちらの方がハードルが高い状況にありますが^^; zhファイルだけコピーして、保存先を専用の別フォルダに変更するだけならAccessのスクリプトを変更するだけなので、メールの件名よりはお願いしやすいと思いますので、一度上司に相談してみます。 コピー先のフォルダなら、読み込み後に削除しても問題ないので、ファイルの有無だけを判断したらよいというのが素晴らしいですよね。 勉強になります。 素晴らしいご提案もありがとうございました!

関連するQ&A

  • Automatorで変数を使ったファイル検索

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

    • ベストアンサー
    • 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が失敗する原因

    お世話になります。 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のフォルダアクションについて

    お世話になります。 以前、こちらで「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
  • AUTOMATOR の使い方について

    AUTOMATOR の使い方について 現在、ヤフーオークションの結果をファイルメーカーにコピペして ファイルメーカーで落札者の管理をしております。 コピー内容は、商品名、終了時刻、落札金額、IDのみですが AUTOMATOR もしくは、その他なにかのソフトを使って 指定した項目のコピーペーストを自動で行うことは可能でしょうか?

    • ベストアンサー
    • Mac
  • AutomatorでCDをやく!

    こんにちは、お世話になっております。 先日こちらでAutomatorを教えていただき、やみつきになっております。 今回は「1度焼いたCDーRWを再利用してデータをいれなおす」という自動処理を作ってみたのですが、2回までしか使えません(^^;) Automatorに入力したアクションは2つで、 1、ファインダー項目の選択を求める 2、ディスクを作成(先に消去にチェック) です。 ディスクユーティリティで消去し、データを入れ、ディスク作成したCD-RWに対して、このAutomator実行が2回までしか使えません。3回目は失敗に終わり、CD-RWの中身は変わりません。そのディスクを再度、ディスクユーティリティにて消去し‥‥以下同作業をすると、また、2回実行できます。これはなぜなんでしょう。何かアクションが足りないのでしょうか?それともこういうものなんでしょうか、(笑)ちなみにtiger搭載G5を2台同時購入したのですが、両方同じ症状です。 回数に制限がなければ、私にとって、ものすご~~く感動的な自動処理になるのですが‥何だか不完全燃焼です。 なにかヒントなどないでしょうか。よろしくお願いいたします。 powerMAC G5、10.4.5 Automator1.0.3

    • 締切済み
    • Mac
  • Automatorについて

    大量のファイルを選択し既存フォルダに移動させるだけの作業ですが、 フォルダ名:「AI¥001」,「AI¥002」,「AI¥003」.....「AI¥240」 ファイル名:「AI¥001¥01.AI」,「AI¥001¥02.AI」....「AI¥001¥26.AI」       「AI¥240¥01.AI」,「AI¥080¥02.AI」....「AI¥240¥26.AI」 各フォルダに26個のAIファイルを入れたいのですが、その作業を240回繰り返さなくてはなりません。Automatorの使い方をレクチャーしていただけませんか?

    • ベストアンサー
    • Mac
  • Finderの検索が正常動作しない

    snowLeopard(10.68)環境で通常、Finderでフォルダを開き、「ファイル >検索」で検索ウインドウを表示させて、検索項目の「このMac」の隣にある「今開いているフォルダ名」が表示され、そのフォルダ名を選択して検索すればその内を検索できます。 ですが、なぜかフォルダ名が表示されません。フォルダ名が表示されずに ユーザー名(ユーザーディレクトリの意と思われます)が表示されてしまっています。そのため、特定フォルダ内の検索ができなく困っています。 「Finder >環境設定」の 詳細タブ から「検索実行時」項目は『現在のフォルダ内を検索』になっています。 このような状況で、特定フォルダ内の検索ができなく困っています。 問題の解決方法やチェックすべきことなどご教授ください。よろしくお願いします。

    • 締切済み
    • Mac
  • Thunderbirdのフィルタについて

    お世話になります。 メーラーはThunderbirdを使ってます。 で、受信トレイ内にAというフォルダを作り、 受信時にそのフォルダに入るようにフィルタを設定しました。 そのフィルタの項目を増やそうとして、 ツール→「メッセージフィルタ」をクリックするつもりが、 ツール→「フォルダにフィルタを適用」をクリックしてしまいました。 そのため、他のフォルダの条件のメールもAに受信されるように なってしまいました。 フィルタ名を一旦削除して、 削除したフィルタ名と同じフィルタ名で作り直したんですが、 改善されないようです。 どうすれば、ツール→「フォルダにフィルタを適用」を クリックした時の条件は解除されるのでしょうか。 教えていただけると幸いです。 宜しくお願い致しますm(__)m

  • 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