• ベストアンサー
  • すぐに回答を!

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項目にフィルタを適用する際に、変数を使用する方法を教えて下さい。 もしそれが不可能でしたら、他にどのような方法がありますか? ご指導よろしくお願いします。

共感・応援の気持ちを伝えよう!

  • 回答数13
  • 閲覧数2109
  • ありがとう数8

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

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

もっとシンプルにフォルダアクションを # 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のドラッグすれば良いので、使うにはこれで十分かも。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

関連するQ&A

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

    Automatorを使って、毎日決まった時間にファイルのコピーをしたいのですが、手順がいまいちわからないので教えて下さい。 ファイル名は「当日の日付+15+文字列」で、日付の部分が変動します。 そこで、Automatorの「日付と時刻」変数から、必要な形式yymmddとなるように変数を作成しました。 変数名は「folderName」としました。 1)この変数はいつでも呼び出せるように保存するにはどうしたらよいですか? Automatorのカレンダーアラームで、以下のようにワークフロー(?)を作りました。 ------------------------- ・変数の値を取得   →上記のyymmddとなる日付 ・Finder項目を検索   →検索条件 「名前」 が 「folderName」 を含む    変数名は手で入力しました ・フォルダの内容を取得 ・Finder項目をコピー ------------------------- 一連の動作を確認すると、以下のようなログが残っていました。 ・変数の値を取得  完了 ・Finder項目を検索  完了 ・フォルダの内容を取得  完了 &#65293;1warning  アクション”フォルダの内容を取得”に必要なデータがありません。 ・Finder項目をコピー  完了 &#65293;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&#65374;3までの工程は問題なかったようで、ファイルのコピーまではできていました。 エラーの内容はうろ覚えですが、「スクリプトを確認して下さい」のような文言だったと思います。 4.の「AppleScriptを実行」のa.に関してはダイアログなどを出していないのでできているのか不明ですが、b.の部分はできていなかったので、恐らく、b.のところで止まってしまったように思います。 事前にFileMakerのウインドウが前面に来るようにはしてあるのですが・・・。 漠然とした相談で申し訳ありませんが、何かご存知でしたら教えて下さい。 宜しくお願い致します。

    • ベストアンサー
    • Mac

その他の回答 (12)

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

>エラーの内容は「Stufflt Expanderが予期しない理由で終了しました Stufflt Expanderが不調でしたら、別の方法が有ります。 まずこちらを参考に。AppleScriptにも対応しています。 http://macrunner.blog.fc2.com/blog-entry-54.html ほかにもコマンドからやる方法もありますが、こちらはいろいろインストールしないといけないので、まず上の方法を試してみたください。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

お世話になっております。 ご紹介いただいたアプリは私も最初にインストールして試したのですが、AppleScriptから解凍して、その後にlzhのオリジナルフォルダを削除する機能が使えなかったので、Stufflt Expanderに変更した次第です。 職場のPCではStufflt Expanderでのエラーは一度も起きていないので、やはり私のPCが怪しい気がします。。。 以前も、別のアプリが正常な動きをせずにOSの再インストールをしたらアッサリ解決したことがあります。 まだ購入から数ヶ月なんですけども^^; 代替案までご紹介いただきまして、ありがとうございましたm(_ _)m

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

No.10のお礼欄承知しました。 Automatorの場合にはそのままでは条件分岐ができないのでプログラムを分けないとうまくいきません。 まず、最初に作ったプログラム本体(データベースに登録)ですが、フォルダアクションを解除して、アプリケーションとして保存してください。(少なくともOSX 10.9のAutomatorではメニューの変換で可能です) そして、No.1で追加した 1. 指定されたFinder項目を取得 2. フォルダの内容を取得 3.シェルスクリプトを実行 のアクションを削除してください。そうすると質問者さんが最初に作成した状態にになると思います。 アプリケーションとして保存したファイルをここでは仮にadd_data2とします。 次に動作テストしてください。 このadd_data2のアイコンに登録したいlzhファイルをドラッグしてみてください。そうするとプログラムが動きだして、データベースに登録されるはずです。 まずここまで確認してください。 次にもう一つAutomatorで作成します。 No.7で作成したものを変更してもかまいません。次の順番でアクションを並べます。 1. 指定されたFinder項目を取得 ここに2つのフォルダを登録してください。 最初に、lzhファイルやtxtファイルが自動的に登録されるフォルダ 次に データベースに登録された最後のファイルをいれておくフォルダでNo.7での /Users/xxxx/aaaaに相当します。 このフォルダはどこにあっても構いません。登録する順番を間違えないでください。 (「フォルダの内容を取得」は削除してください) 2. 「シェルスクリプトを実行」 でシェルを/usr/bin/rubyに。入力の引き渡し方法は「引数として」これまでと違いますので注意してください。 スクリプトは # encoding: utf-8 if RUBY_VERSION < %[1.9.0] require %[jcode] $KCODE=%[utf-8] else Encoding.default_external=%[utf-8] end require %[fileutils] source_files=Dir.chdir(ARGV[0]){Dir.glob(%[*.lzh])}.select{|f| f[/^\d{6}(12|16)/]}.sort # 登録対象となるファイル last_finished_file=Dir.chdir(ARGV[1]){Dir.glob(%[*.lzh])}.sort[-1] # 最後に登録したファイル idx=source_files.find_index{|f| f==last_finished_file} # 登録対象となるファイルの中で最後に登録したファイルの位置 copy_files=last_finished_file ? source_files[idx+1..-1] : source_files # 新たに登録するファイル copy_files.each do |f| FileUtils.copy(ARGV[0]+%[/]+f, ARGV[1]) # コピー abort %[エラーが発生しました] unless system %[open -W -a add_data2 #{ARGV[1]}/#{f}] # データ登録作業 end です。 add_data2は先ほどアプリケーションとして保存した名称です。名前を変える時には一致するようにしてください。 これを実行するれば、未登録のものが順次登録されるはずです。基本的にはNo.7と同じ動作のはずです。 動作確認がすめばこちらをフォルダアクションとして設定してください。 ファイルが入っているフォルダはこちらこちらだけで指定し、add_data2は登録するファイル名を渡して実行します。

共感・感謝の気持ちを伝えよう!

質問者からの補足

お世話になっております。 詳しい解説まで付けていただきまして、本当にありがとうございます。 m(_ _)m 教えていただいた順序で作成し、先ほどまで動いていたのですが、急に反応しなくなってしまいました。 再起動もしてみたのですが・・・。 add_data2の方は、アプリケーションとして保存して以下のように設定しました。 1. 変数の値を設定 2. AppleScriptを実行 add_data2のアイコンにlzhファイルをドラッグすると、ちゃんとデータベースにファル名を登録して、lzhファイルは解凍・削除されました。 2つ目のAutomatorは、フォルダアクションとして保存して、 「”フォルダアクション”は、次の場所に追加されたファイルやフォルダを受け取る」という項目には、ネットワークフォルダを指定しました。 あとは、教えていただいたように、 1. 指定されたFinder項目を取得   ネットワークフォルダ   ローカルの/Users/xxxx/aaaa の2つを設定 2. シェルスクリプトは教えていただいたものをそのままコピペしました。 ファイル名はadd_dataとして、前のものは削除して、フォルダアクションのフォルダには他には保存されていません。 最初はちゃんと動いていたので、lzhファイルを追加したり、txtファイルを追加してみたり、動きを確認していたのですが、add_data2のAppleScriptの中でlzhファイルを解凍しており、その解凍ソフトの段階で何度もエラーが出ました。 エラーの内容は「Stufflt Expanderが予期しない理由で終了しました」というもので、lzhファイルをコピーするところまではいくのですが、解凍と解凍後のlzhファイルの削除ができません。 それと、私の環境の問題かも知れませんが、lzh以外のファイルが追加された時、何も起きない場合と、1つ前のlzhファイルで処理を最後までしようとして、ファイル名が重複してエラーが起きることもありました。 もうちょっと試してみて、状況を見極めなくてはと思います。 取り急ぎ、ご報告をさせていただきました。 よろしくお願いいたします。 m(_ _)m

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

No.6の補足欄について まだ理解できていないところがあるのですが、 >Automatorのフォルダアクションはカレンダーのイベントに登録しなくても、ワークフローとして作成保存した時点で有効になるんですね。 フォルダアクションは使った事がないのですが、ネットワーク上のフォルダでも動くのでしょうか?(半分独り言です) >現状では、関係のないtxtファイルが作成された場合でも毎回処理に入ってしまうので、目的のファイルが作成された時だけに限定をしたいです。 txtファイルが作成されたきには前のファイルをもう一度二重に処理されませんか? なにか二重に処理されないようにそちらでプログラムを追加しているのでしょうか? いずれにしても、No.7の方法だと関係のないtxtファイルが作成された場合には直ぐに終了しますので、影響はないと思います。 書き換え中ですのでNo.7を使うのはしばらくお待ちください。動くことは動くとは思いますが。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ki073様 お世話になっております。 お忙しい中、何度もご回答いただきまして本当にありがとうございます。 > フォルダアクションは使った事がないのですが、ネットワーク上のフォルダでも動くのでしょうか?(半分独り言です) はい、動いております。 > txtファイルが作成されたきには前のファイルをもう一度二重に処理されませんか? なにか二重に処理されないようにそちらでプログラムを追加しているのでしょうか? はい、最後のlzhフォルダで二重に処理されています。 二重に処理をされないプログラムは、まっっったく方法がわからないので、追加はしていません。 教えていただいたNo.7の方法を昨夜と今日で何度か挑戦しているのですが、こちらではエラーとなってしまいまだ結果を見ることができていません。 ネットでエラーの内容などを調べてはいるのですが、どうにもわからなくてお手上げになりましたら、またエラーの内容を相談させて下さい。 > いずれにしても、No.7の方法だと関係のないtxtファイルが作成された場合には直ぐに終了しますので、影響はないと思います。 ありがとうございます! その動作はまさに理想です! 貴重なお時間を割いてプログラムを作っていただきまして、本当に感謝しております。 ありがとうございますm(_ _)m

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

No.7のプログラムは急ごしらえなので、メンテナンスもできないようなぐちゃぐちゃになっています。 すっきりして、分かりやすいプログラムに書き換えがほぼできました、夜にでも書き込みますのでお待ちください。

共感・感謝の気持ちを伝えよう!

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

書き忘れました /Users/xxxx/aaaa が空っぽだったら、対象となる全部のファイルを登録しようとしますので、少し前のファイルを最低一個入れておいてください。 その次の時間のファイルから順番に登録していきます。

共感・感謝の気持ちを伝えよう!

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

No.6のどの場合にも対応できるものを作ってみました。 どのファイルを登録したか覚えておく必要がありますので、登録済みのファイルをためておき、その中で日時が一番最後のファイルの次から新たに登録するようにしました。 実際には2つのAutomatorファイルで動かします。 1) Macの適当な場所に登録済みのファイルを置いておくフォルダを作成してください。 これを/Users/xxxx/aaaaとする 2)これまで作成したプログラムを次のように変更してください。 rubyで作成した「シェルスクリプトを実行」の最後を puts ARGF.select{|f| File.basename(f)[/^\d{6}.*lzh$/]}.sort[-1] に変更。 それと「指定されたFinder項目を取得」のパスを先ほどの/Users/xxxx/aaaaに変更する そしてアプリケーションとして保存し、名称を例えば「add_data」とします。 保存場所はどこでもかまいません。 要するに/Users/xxxx/aaaaのなかの最新のファイルを登録するアプリケーションになります。 次に、新しくAutomatorで作成します。ほぼ先ほどのものと同じです。 1) 指定されたFinder項目を取得 もとのサーバのフォルダを指定します。 2) フォルダの内容を取得 3) シェルスクリプトを実行(rubyを指定) で中身は # encoding: utf-8 if RUBY_VERSION < %[1.9.0] require %[jcode] $KCODE=%[utf-8] else Encoding.default_external=%[utf-8] end require %[fileutils] copy_folder=%[/Users/xxxx/aaaa] # データベースに登録されたファイルを入れておくフォルダ finished_file=Dir.glob(copy_folder+%[/*]).collect{|f| File.basename(f)}.sort[-1] # 一番最後に登録したファイル files=ARGF.to_a sorted_files=files.collect{|f| File.basename(f).chomp} .select{|f| f[/^\d{6}(12|16).*lzh$/]}.sort # 対象ファイルを時間順に並び替え i=sorted_files.find_index{|f| f==finished_file} # 最後に登録したファイルの位置 copy_files=finished_file ? sorted_files[i+1..-1] : sorted_files # これから登録するファイル copy_files.each do |f| FileUtils.copy(File.dirname(files[0])+%[/]+f, copy_folder) system %[open -W -a add_data] end です。 そのなかで、 copy_folder=%[/Users/xxxx/aaaa] は、先に作成した登録済みのファイルを入れておくフォルダに書き換えてください。 system %[open -W -a add_data] のadd_dataは先にアプリケーションとして保存したものと合わせておいてください。 こちらのソフトを起動すると、未登録なファイルがあると、/Users/xxxx/aaaaに1つずつコピーして、add_dataが一回ずつ起動します。要するに溜まっていたふぁいるが一気に処理されます。 また、処理するファイルが無い場合には何もせずに終了します。 ちょっとごちゃごちゃしているので、分かりにくくなっていますが、 もしRubyがある程度分かる様になれば、Automatorではなく、Rubyの実行ファイルにした方が分かりやすようにも思います。 両方のファイルともにRubyの実行ファイルにほとんど手間をかけることなく作り替えることができます。

共感・感謝の気持ちを伝えよう!

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

No.4の補足欄を見逃しておりました。 確認ですが、 一日に該当するファイルが2つできますが、 開始時間~終了時間・・・23:00~00:30 で両方とも処理をしたいのでしょうか? 試験なので、16時のファイル1つだけでよいのでしょうか? それとも、同じファイルを処理すとことがあって、それを回避したいのでしょうか? (こちらかな)

共感・感謝の気持ちを伝えよう!

質問者からの補足

お世話になっております。 お忙しい中、ありがとうございますm(_ _)m 何度もすみません。。。 説明が下手で申し訳ありません。 lzhファイルが保存されるネットワークフォルダには、朝から夕方までの間に約10個のファイルが随時作成されます。 その作成されるファイルは、lzhファイルの他にtxtファイルがあります。 lzhファイルは1日に9時台、10時台、12時台、16時台のだいたい4つ作成され、必要なものは12時台と16時台の2つだけです。 ネットワークフォルダを監視して、12時台のファイルが作成されたら処理を実行、16時台のlzhファイルが作成されたら処理を実行する、という1日に2回の処理を自動ですることが理想です。 現状では、関係のないtxtファイルが作成された場合でも毎回処理に入ってしまうので、目的のファイルが作成された時だけに限定をしたいです。 開始時間と終了時間については私の勘違いでした。 Automatorのフォルダアクションはカレンダーのイベントに登録しなくても、ワークフローとして作成保存した時点で有効になるんですね。 カレンダーに起動時間を設定しないと動かないものだと思っていました。 説明が下手な上に紛らわしいことを書いてすみませんでした。 ちなみに同じファイルを処理することはありません。 取り急ぎお礼まで。。。

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

うまくできましたか。良かったです。 テキストデータの処理用にプログラム言語を勉強されるのでしたら、今回使ったRubyをお勧めします。 AppleScriptやシェルスクリプト(baah)よりも癖が無くて分かりやすいはずです。 今回は実質1行で済む簡単なものでしたが、 こちらでは、大量のテキストデータから情報を取り出すことをときどきやっており、Rubyが活躍しております。 AppleScriptがある程度できるようですがRubyはそれよりも簡単です。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

No.5へのお礼が遅くなり大変失礼いたしました。 Rubyの方が癖がないんですね。 先にAppleScriptから見ていたのでびっくりしましたが、ki073様がおすすめしてくれたので、腰を据えて勉強を始めます! 今日、Amaoznで入門書を注文しました。 AutomatorもAppleScriptもとっつきにくかったので、良い機会を与えて下さってありがとうございます。 20年ぐらい修行したら私もki073様のように誰かのお役に立てるでしょうか^^; No.4の補足にも書かせていただきましたが、また壁にぶち当たっています。 明日、入門書が届くのでもう少し試行錯誤してみます。 それでも解決しなかった時はまた相談にのってやって下さい。 どうぞ宜しくお願い致します。 m(_ _)m

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

OSX 10.6.8でも試してみましたがこちらでは問題が無いようです。 rubyのバージョンがどちらでも対応できるように書き換えてみましたので試してみてください。 次の行が第1行目になるように(上に空行が入らない) # encoding: utf-8 if RUBY_VERSION < %[1.9.0] require %[jcode] $KCODE=%[utf-8] else Encoding.default_external=%[utf-8] end puts ARGF.select{|f| File.basename(f)[/^\d{6}(12|16).*lzh$/]}.sort[-1] 最後の一行以外は文字コードUTF-8を使うためのおまじないです。書き方が先のものと少し変更されていますが用語統一で本質的には変わりません。 検索条件が少し変更しています。その日のものではなく、数字6桁の次ぎに12または16がくる拡張子lzhのファイルで、最新のものになっています。その日指定であれば today=Time.now.strftime(%[%y%m%d]) puts ARGF.select{|f| File.basename(f)[/^#{today}(12|16).*lzh$/]}.sort[-1] にしてください。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ki073様 ありがとうございます!!! 10.8のPCでできましたーーーーー!!! すごいすごい!!! 本当にありがとうございます!!! rubyのバージョンが異なるとおまじないの書き方も結構違うものなんですね。 日付の指定をする方法も教えて下さってありがとございます。 平日のみのファイルが欲しいので、感謝感謝です。 % とか ^ 、/ 、 \ など独特な記号が踊り、とっつきにくい印象でしたが、今回の修正が片付いたら参考書を購入してみます。 ki073様に教えていただかなかったら、まず接することはなかったと思いますのでシェルスクリプトに引き続き心から感謝しております。 ありがとうございましたm(_ _)m

質問者からの補足

ki073様 ありがとうございますm(_ _)m 監視対象のフォルダにファイルが追加された時に自動で動くかどうか試しており、お礼が遅くなってしまいました。 申し訳ありません。 Automatorでは以下のように設定をして動きを試してみました。 1. 指定されたFinder項目を取得 2. フォルダの内容を取得 3. シェルスクリプトを実行 4. Finder項目をコピー 5. 変数の値を設定 6. AppleScriptを実行(圧縮ファイルの解凍、削除、FileMakerへのファイル名受け渡し) カレンダーイベントではお試しで以下のように設定しました。 開始時間~終了時間・・・23:00~00:30 繰り返し・・・(月)~(金) 通知・・・ファイルを開く(上記のファイル) ki073様に教えていただいた、3. のrubyの部分では、目的以外のファイルが追加されても、そのファイルを選択することはなく完璧なのですが、上記のような流れだと、目的以外の場合でも 4. 以降最後まで処理をしてしまいます。 3. のrubyの部分で最新のlzhファイルを選択した時だけ4. 以降の処理を実行したい場合はどのようにしたらよいでしょうか。 全く見当もつきません・・・。 できた!と思ったのに、また質問で本当に申し訳ありません。 心苦しいのですが、もしお時間がございましたらご指導をお願い致します。 m(_ _)m

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

No.2の補足欄について、 OSX 10.9のrubyのバージョンが2.0.0で、それ以前のOSXの場合にはrubyが1.8.7なのです。その違いによります。 基本的には最初の二行 # coding: utf-8 Encoding.default_external=%[utf-8] が機能しません。日本語のコードの問題もありますので、明日OSX 10.6で確認してみます。 今のところ、 # coding: utf-8 Encoding.default_external=%[utf-8] の二行を require %[jcode] $KCODE=%[UTF8] に変更することで大丈夫だと思っています。 日本語のファイル名が混じっている場合には問題になるかも知れませんので確認してみます。 それと、 %[UTF8] のように特殊な書き方をしています。 "UTF8"と全く同じ意味なのですが、Automatorに入力するときにはちょっと問題が発生することがありますので、あえ文字列を %[]で囲って書いています。スマート引用符がオンになっていて、オフにしないと""や''正常に入力できないのです。入力する領域で右クリックでスマート引用符をオフにできるのですが、分かりにくいのであえてそのような書き方をしています。 他のサイトを参考にするときには読み替えてください。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

深夜にも関わらず早速のご回答ありがとうございますm(_ _)m 後出しになってしまい申し訳ありません。 ファイル名は半角英数のみで、日本語は使用されていません。 お気遣いありがとうございました。 教えていただいたように、    require %[jcode]    $KCODE=%[UTF8] と変更したらエラーは出なくなりました! ありがとうございます! 結果は、 ファイル名が今日の日付でlzhの最新ファイルは得られたのですが、 ファイル名が今日の日付とは関係のない文字列で、拡張子がcsvのファイルも選択されていました。 2つ目のcsvの方はフォルダ内で最新のファイルです。 拡張子の指定が利いていないようなのですが、ここもrubyのバージョンが影響しているのでしょうか? お作法がいろいろあって難しいです。。。 これだけご教示いただいているのに、なかなか「解決」とできずに申し訳ありません。 またお暇ができた時にでも構いませんので、ご指導よろしくお願いいたします。 m(_ _)m

関連するQ&A

  • 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について

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

    • ベストアンサー
    • 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
  • Finderの検索が正常動作しない

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

    • 締切済み
    • Mac
  • GetOpenFileNameでファイル名でのフィルタ

    こんにちは, EXCEL2007 VBAを用いて ワークブックオープン時にファイル選択ダイアログを表示しています。  GetOpenFileName("日報ファイル(*.CSV),*.CSV",false) 上記は拡張子*.CSVでフィルタを掛けていますが、 ファイル名を絡めてフィルタを掛けることはできないのでしょうか? 日報ファイルなら*day.CSV,月報なら*month.CSVといった様に・・・  GetOpenFileName("日報ファイル(*day.CSV),*day.CSV",false) 上の様にすると*.*となりフィルタがかかりません。 ファイル選択ダイアログのファイル名のところに*day.CSVと手入力すれば フィルタがかかります。これをVBAから行えないでしょうか? よろしくお願いいたします。

  • Finderとかがおかしいんですが、、

    すいません。質問させていただきます。 仕事先のMacが調子が悪いのですが、、簡単にいうとfinderとデスクトップがおかしいのです。 まずfinder横のアップルマーク下の項目の「再起動」「システム終了」、finder下の項目は「ゴミ箱を空にする」、ファイル下は「ゴミ箱に入れる」が重複表示されます。 あと、デスクトップ上のフォルダ等のどれかひとつに黒い二重線の角枠がでます。あとフォルダを開くと、finderウィンドウのも黒枠が付き、モニタ上で場所を移動すると画面に残ります。 あとフォルダを開くのも遅くなったりします。使うアプリはフォトショCS2とイラレCS2です。 PowerMacG5 Dual 2G OS10.4.2 メモリ1GBです。LANでUnixのCG送出機とLandiskHDDが繋がってます。本体のドライブは壊れててFirewireで外付けドライブです。 試したのはpram。外付けドライブからの起動diskからのディスクユーティリティで修復でもダメ(診断のときに途中で診断をストップになりました。その後修復して修復完了とでました)。shift押しでも症状は一緒でした。 別のサラのログインでは症状はでませんでした。すいませんがお願い致します。

    • ベストアンサー
    • Mac
  • Thunderbirdのフィルタについて

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

  • MacOSX 10.9 Finderを自動起動

    させたいです。 別途使っているラップトップだとログイン時にFinderが自動起動されてデスクトップ上にファイルやストレージが表示されるのですが今これを書いているMac Miniのみ、毎回自分でFinderを起動しなければなりません。 環境設定からログイン項目でアプリ指定をしようとしたのですが、Finderはアプリケーションフォルダにないのですね...。 さらに検索しようと「Finder ファイルパス」などとググって見るのですが「Finderでファイルパスを表示させる方法」みたいなページばかりが出てきます(涙) よろしくお願いします。

    • ベストアンサー
    • Mac
  • Automatorで指定時刻にファイルを印刷したい

    Macにデフォルトで付いている「Automator」を使用して 以下のような操作をさせたいのですが、どうすればいいのでしょうか? 1.毎朝9時に、デスクトップ上にあるExcelファイルを開く 2.Excelブックを印刷 3.Excelファイルを閉じる Excelファイルを開く、プリントする、閉じる、という項目は それっぽいものがあったのでわかるのですが、 時間指定の方法と、特定のファイルを開く、という部分がわかりませんでした。 初歩的な質問で申し訳ないのですが、 どなたか教えていただけるとありがたいです。 よろしくお願いします。

    • 締切済み
    • Mac
  • Finderが動かない

    こんにちは。MACのFinderが先日、動かなくなってしまいました。 状況で言うと、 常に「アプリケーションが応答しません」の表示。 レインボーカーソルが常に回っていて、たまにレインボーカーソルが消えたと思っても 動かす事は出来ず、何度「再度開く」を選択しても無理でした… ディスクユーティリティーでアクセス権の修復などをすると5~10分くらいは使えますが、 またすぐに使えなくなってしまいます。アクティビティモニタやターミナルを使って終了させても駄目。 色々ネットで探してみると、Library/Preferencesにcom.apple.finder.plistなどのファイルがあると言う記述を何度も見かけたのですが、自分のPCからは見当たりませんでした。 新規アカウントを作ってみても駄目でした。 関係はないと思いますが、ちょうどTimeMachineがエラーで使えなくなったのとほぼ同時にFinderにも症状が出始めました。 バックアップの作成を完了できません。バックアップフォルダの作成中にエラーが起きました。 と表示されるようになり、1ヶ月ほどバックアップは失敗のまま… 自分の知識不足のせいで申し訳ないのですが、修理が必要なのか、他にも試してみる方法があるのか…ぜひご協力よろしくお願いします。

    • 締切済み
    • Mac