- ベストアンサー
Automatorで変数を使ったファイル検索
- Automatorを使用して、毎日決まった時間にファイルのコピーを行うための手順を説明します。
- 手順の中で使用する日付変数の保存方法やファイル名の指定方法についても解説します。
- また、フォルダの内容を取得する際に発生するエラーについても注意点を述べます。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>2)検索するファイル名のところに、手打ちで変数名を入れたことが間違っているように思うのですが そのように思います。Finder項目を検索は入力を受け付けるような書き方をしていますが、使い方がよく分かりませんでした。 Automatorでシェルスクリプト利用した方が簡単なように思います。 1) 特定のフォルダ(その下のフォルダも含む)の中の特定の名前(あるいは全てのファイル)をコピーしたいのでしたらrsyncを使う方が簡単 2) 更新日を頼りにコピーするファイルを特定できるならfindを使ってコピーコマンドを作る。あるいはファイル名の場合もfindで可能 具体的な仕様がはっきりすればアドバイスが可能ですが。 シェルスクリプトの結果でAutomatorで使うことができますので、自由度は増す様に思います。 例えば find ~ -name *`date +"%y%m%d"`* で今日の日付を含むファイル名を取得できます
その他の回答 (4)
- ki073
- ベストアンサー率77% (491/634)
ls ~/Volumes/○○○/●●●/`date +%y%m%d15`*.csv ではなくて ls /Volumes/○○○/●●●/`date +%y%m%d15`*.csv です。~を取り除いてください。 ~は/Users/ユーザー名を示していますので
お礼
できました!!!! No.3の方法で希望通りにファイルをコピーできました~~!!! もう無理だとあきらめようと思っていたところ、ki073様のお陰で救われました。 記述のサンプルだけでなく、解説までしていただけて、とても勉強になりました。 本当に心から感謝しております。 スクリプトの見た目がとっつきにくそうなイメージでしたが、シェルスクリプトについてこれからも時間を作って勉強していきたいと思います。 本当にありがとうございました。 また、壁にぶち当たりましたら相談させて下さい。 ありがとうございましたm(_ _)m
- 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」で始まる名前のファイルも入っています・・・。 どこが間違っているのか・・・わかりません・・・。 本当に申し訳ありませんが、間違っているところをご教示願えませんでしょうか。 何度も申し訳ありません。 宜しくお願い致します。
- ki073
- ベストアンサー率77% (491/634)
No.1, 2です。 なるべくAutomatorのアクションを使うということでしたら、 「シェルスクリプトを実行」に ls ~/folder1/`date +%y%m%d15`*.csv その次に 「FInder項目をコピー」 でも可能です。
- 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 取り急ぎお礼まで。。。
補足
ご回答ありがとうございます。 「シェルスクリプト」も「rsync」も初めて目にしましたが、他に方法があるのなら是非教えていただきたいです! 1)コピーしたいファイルは、ネットワーク上の共有フォルダに毎日追加されていくものです。 1日にだいたい4つぐらいファイルが追加されますが、コピーしたいものは15時台のものだけです。 ファイル名はyymmddhhmmss文字列.csvとなっていて、年月日時までと文字列、拡張子は特定できるのですが、分秒が流動的です。 それで、yymmddの部分までを変数に入れました。 2)更新日も決まってはいないので、ファイル名から検索するしか手がない状態です。 Automatorとシェルスクリプト、rsyncはどのようにして連携させるのですか? お時間がございましたら、引き続きご指導いただけますようお願い致します。