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

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

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

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

  • 回答数5
  • 閲覧数1654
  • ありがとう数1

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

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

>2)検索するファイル名のところに、手打ちで変数名を入れたことが間違っているように思うのですが そのように思います。Finder項目を検索は入力を受け付けるような書き方をしていますが、使い方がよく分かりませんでした。 Automatorでシェルスクリプト利用した方が簡単なように思います。 1) 特定のフォルダ(その下のフォルダも含む)の中の特定の名前(あるいは全てのファイル)をコピーしたいのでしたらrsyncを使う方が簡単 2) 更新日を頼りにコピーするファイルを特定できるならfindを使ってコピーコマンドを作る。あるいはファイル名の場合もfindで可能 具体的な仕様がはっきりすればアドバイスが可能ですが。 シェルスクリプトの結果でAutomatorで使うことができますので、自由度は増す様に思います。 例えば find ~ -name *`date +"%y%m%d"`* で今日の日付を含むファイル名を取得できます

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

質問者からの補足

ご回答ありがとうございます。 「シェルスクリプト」も「rsync」も初めて目にしましたが、他に方法があるのなら是非教えていただきたいです! 1)コピーしたいファイルは、ネットワーク上の共有フォルダに毎日追加されていくものです。 1日にだいたい4つぐらいファイルが追加されますが、コピーしたいものは15時台のものだけです。 ファイル名はyymmddhhmmss文字列.csvとなっていて、年月日時までと文字列、拡張子は特定できるのですが、分秒が流動的です。 それで、yymmddの部分までを変数に入れました。 2)更新日も決まってはいないので、ファイル名から検索するしか手がない状態です。 Automatorとシェルスクリプト、rsyncはどのようにして連携させるのですか? お時間がございましたら、引き続きご指導いただけますようお願い致します。

関連するQ&A

  • 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のフォルダアクションを使ってファイルを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

その他の回答 (4)

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

ls ~/Volumes/○○○/●●●/`date +%y%m%d15`*.csv ではなくて ls /Volumes/○○○/●●●/`date +%y%m%d15`*.csv です。~を取り除いてください。 ~は/Users/ユーザー名を示していますので

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

質問者からのお礼

できました!!!! No.3の方法で希望通りにファイルをコピーできました~~!!! もう無理だとあきらめようと思っていたところ、ki073様のお陰で救われました。 記述のサンプルだけでなく、解説までしていただけて、とても勉強になりました。 本当に心から感謝しております。 スクリプトの見た目がとっつきにくそうなイメージでしたが、シェルスクリプトについてこれからも時間を作って勉強していきたいと思います。 本当にありがとうございました。 また、壁にぶち当たりましたら相談させて下さい。 ありがとうございましたm(_ _)m

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

ネットワークの場合は/Volumes/サーバー名 /フォルダ名/..のようになります。 Finderの「情報を見る」で表示されますが、パスを入力したい場所に、該当するフォルダやファイルをドラッグすれば絶対パスが入りますのでこちらの方が便利です。 もしパスに空白が含まれるのでしたらダブルクォーテーションでパスを囲む必要があります。 No.3の方がデバッグをしやすいように思います。

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

質問者からの補足

何度もご解説いただいており、心から感謝しておりますm(_ _)m フォルダをドラッグするとパスが入力されるんですね! びっくりしました! >もしパスに空白が含まれるのでしたらダブルクォーテーションでパスを囲む必要があります。 勉強になります。 今回は空白を含むフォルダ名ではありませんでした。 No.3で教えていただいた方法で、下記のように書いて「実行」を押すと、またエラーになってしましました。 ----------------------------------- ls ~/Volumes/○○○/●●●/`date +%y%m%d15`*.csv シェルスクリプトを実行 失敗 ー1件のエラーー  ls: /Userd/ユーザー名/Volumes/○○○/●●●/14042215*.csv : No such file or directory(1) ----------------------------------- 指定のフォルダには「14042215」で始まる名前のファイルも入っています・・・。 どこが間違っているのか・・・わかりません・・・。 本当に申し訳ありませんが、間違っているところをご教示願えませんでしょうか。 何度も申し訳ありません。 宜しくお願い致します。

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

No.1, 2です。 なるべくAutomatorのアクションを使うということでしたら、 「シェルスクリプトを実行」に ls ~/folder1/`date +%y%m%d15`*.csv その次に 「FInder項目をコピー」 でも可能です。

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

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

No.1です。 >Automatorとシェルスクリプト、rsyncはどのようにして連携させるのですか? Automatorのアクションに「シェルスクリプトを実行」がありますのでそれを使います。 例えば date +%y%m%d を入れて実行させると今日の日付が次のアクションに送られます。 「シェルスクリプトを実行」を選ぶと、catという文字が入っていますが消して文字をいれてください。 今回の場合は cp ~/folder1/`date +%y%m%d15`*.csv ~/folder2 で可能だと思います。 ~/folder1/はコピー元のフォルダ名 ~/folder2をコピー先のフォルダ名に置き換えてください。 `date +%y%m%d15`で今日の日付に15を追加した文字列を取得しています。

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

質問者からの補足

ki073様 早速のご回答ありがとうございます。 cp ~/folder1/`date +%y%m%d15`*.csv ~/folder2 folder1 と folder2 をデスクトップとDocuments で試したらちゃんとコピーできました!うれしいです! でも、下記のようにfolder1にネットワークフォルダーを、folder2にディレクトリを指定するとエラーになってしまいました。 cp ~/○○○/●●●/`date +%y%m%d15`*.csv ~/Library/□□□/△△△ パスの書き方が間違っているのだと思います。 もうちょっとネットで調べてみます。 それでもわからなかったら、甘えてばかりで心苦しいのですが、パスの書き方の部分も教えていただけないでしょうか。 宜しくお願い致しますm(_ _)m 取り急ぎお礼まで。。。

関連するQ&A

  • 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
  • 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
  • automator でディスクイメージのマウントでエラー

    Mac OS X(10.4.6) で automator を使ってディスクイメージを マウントしようとしています。 Finder のアクション「指定されたFinder項目を取得」と 「ディスクイメージをマウント」を組み合わせて実行すると デスクトップにマウントはされますが、 - ディスクイメージをマウント was stopped - ディスクイメージをマウントでエラー となり、ワークフローが中断してしまいます。 エラーの内容は「<class psxf> (item 1 of every paragraph of "") of <script> をタイプ alias に変換できません(-1700)が起きま した」というものです。 ヘルプやWebで検索してみましたが理由が分かりませんでした。 何かご存知であれば教えていただけないでしょうか?

    • ベストアンサー
    • Mac
  • AUTOMATOR の使い方について

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

    • ベストアンサー
    • Mac
  • バッチ処理でファイル名に日付を指定したい

    こんにちは。 使用OS:WindowsNT4.0 Server バッチファイルで、 c:\>dir >yymmdd.dat というコマンドを実行させたいのですが、ファイル名としてyymmddのところを実行した日付にしたいのです。 で、yymmddの値が正しくなるようにバッチ処理中に日付を取得して、その値を変数に代入しなければならないと考えるのですが、変数に日付を代入するコマンドがわかりません。 そもそも無理なことなのかもしれませんが、バッチ処理でシンプルに行えたらなと考えております。 方法はありますでしょうか? その後に予想される問題なのですが、仮に変数に日付が代入されたとしても、その変数の内容をファイル名の一部として指定できるかどうかも分かりません。 重ねて質問ですがこれが無理な場合、何か代替案はないでしょうか? 何がしたいかと言うと、ドライブの空き容量を定期的に自動で吐き出させたいのです。 ソフト(フリーも含めて)に頼る方法が有るのでしょうが、基本的にソフトの導入は敬遠したいと考えております。 宜しくお願い致します。

  • ファイル検索について

    できれば、すぐに回答を頂けたら幸いです。 開発環境はVC++.NETです。 現在、CFileFindクラスのFindFile関数を使用して拡張子無しファイル検索をしようとしています。 FindFile関数に以下のようなパラメータを渡しています。 CFileFind finder; CString path = "C:\\*" BOOL Working = finder.FindFile(path,0); 上記のFindFileを実行後、GetFileName()でファイル名を取得しようとしても、「.」というのしか取得できません。 どなたかこの問題を解決できる方、ヒント、回答を宜しくお願い致します。

  • 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
  • 変数の受け渡しについて

    MS-DOSのBATファイル内に「VBで作成したEXEファイルをCALLする」記述を 追記しようと思っています。 全体の流れは、BATファイルの処理中に使用している変数をEXEファイルに引き渡し、 EXEファイルは受け取った変数の条件分岐処理をし、その結果を再びBATファイルに 返すことです。 教えていただきたい内容は、変数を受け取る際および引き渡す際の記述の仕方についてです。 ちなみにEXEファイルの処理内容は、受け取った変数(日付:YYMMDD書式)のMMの箇所が 「01~03」の場合はAを、「04~09」の場合はB、「10~12」の場合はCを 新しい変数としてBATファイルに返すことです。 どうかよろしくお願い致します。

  • Spotlightコメントの一括編集

    当方、Max OS 10.6を使っており、ファイル管理にSpotlightコメントを利用しようと思っております。 そこで、複数ファイルのSpotlightコメントの一括編集のために、Automatorを使い、サービスを作成しています。 作成したサービスの内容は添付画像の通りシンプルなものです。 1.「選択されたFinder項目を取得」 2.「Finder項目のSpotlightコメントを設定」    「既存のコメントに追加」有効    「ワークフローの実行時にこのアクションを表示」有効 実際に、Finderでファイルを選択しサービスを使ってみると、 コメントは追加されますが、コメントが2重に追加されてしまいます。 このような振る舞いになってしまう原因は何処にありますでしょうか? 解決方法をご存知の方、ご教授ください。 Mac OS 10.6.8 Automator 2.1.1 ("既存のコメントに追加"オプションのチェックを外すと、上書きですが、期待通りに動作します。)

    • ベストアンサー
    • Mac
  • バッチファイルについて

    下記のようなバッチファイルを作りたいのですが 教えていただけませんでしょうか? 作成したい内容は、 PC起動時に自PCにある『XXX.CVS』ファイルを (C:\test\XXX.CVS) 共有ファイルサーバーのフォルダ内へ ファイル名に日付を付けて 『YYMMDD_XXX.CVS』としてコピーする。 (\\test\goo\YYMMDD_XXX.CVS)