- ベストアンサー
Automatorのシェルスクリプトでファイルをコピーできない場合の対処方法
- 以前こちらで教えていただいた方法で、Automatorのフォルダアクションのシェルスクリプトによるファイルのコピーを利用しています。しかし、Windows7の中のiCloud Driveへのコピーがうまくいかないときがあります。接続の切断や他の原因が考えられますが、失敗した場合にメールで通知する方法を探しています。
- モニターを使っていないため、メール通知が便利です。しかし、ネットでの解決策は見つかりませんでした。もしメール通知が難しい場合は、エラーログを残すなどの方法でも構いません。お手数ですが、ご教示いただけますと幸いです。
- Automatorの設定は、指定されたFinder項目を取得し、フォルダの内容を取得して、シェルスクリプトを実行するものです。シェルスクリプトでは、指定されたパスのファイルをiCloud Driveへコピーしています。Mac OS X 10.8.5を使用しています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
cpがエラーがでた場合には、メールを返したいということだと思うのですが、 「シェルスクリプトを実行」にエラーがでるスクリプト(ここではcp)が含まれている場合には、Automatorスクリプト自体がエラーなってしまい、うまくできないようです。 「シェルスクリプトを実行」でrubyを選び、入力の引き渡し方法を「引数として」を選択 スクリプト本体は path=ARGV[1] folderC="/Volumes/iCloudDrive" unless system("cp '#{path}' '#{folderC}/'") system(open -a "メール送信") end とします。上3行はrubyで書き換えただけです。 cpコマンドがエラーになるとsystem("cp '#{path}' '#{folderC}/'")がfalseを返しますので、 system(open -a "メール送信") が実行されます。 Automatorなど適当なメール送信するスクリプト(ここでは"メール送信")を作っておけばメールを返してくれます。
その他の回答 (2)
- ki073
- ベストアンサー率77% (491/634)
質問欄のプログラムがファイル1つしか対応できない書き方をしていたのが気になりましたが、そのままrubyに書き換えました。 フォルダの中身全部でしたら cp folder1/* folder2 のようにすれば全部コピーできます。 また、新しく書き換えられたものだけでしたら、 rsyncを使えば、無駄なコピーをすることがなくなります。
- ki073
- ベストアンサー率77% (491/634)
ちょっと訂正 system(open -a "メール送信") ではエラーになってしまいますね。 system('open -a "メール送信"') のような感じで’か"で文字列にしておいてください。
お礼
ki073様ありがとうございます。 お礼が遅くなってすみません。 教えていただいた方法を学習しながら挑戦しているのですが、なかなかうまく進まず・・・もう少し粘ってみますので、それでもわからなかった時はまた相談させてください。 よろしくお願いします。 取り急ぎお礼まで。
補足
ki073様ありがとうございます。 お陰様で失敗した時のメールは送信できるようになったのですが、ファイルのコピーができません。。。 path=ARGV[1] ← ここにコピー元のファイル名が入るんですよね? Automatorのフォルダアクションから受け取れていないようなのですが、ネットを検索しながらいろいろ試してみたのですがわかりませんでした。 重ね重ねの質問で申し訳ないのですが、なぜコピーに失敗してしまうのかご指導いただけますよう宜しくお願いします。 Mac OS X 10.8.5です。
お礼
ki073様お礼が遅くなりすみませんでした。 インフルで家族全滅ですっかり遅くなってしまい申し訳ありません。 教えていただいた方法でコピーすることができました。 本当にありがとうございました。 今のところはファイルは1つずつしかコピーすることはないのですが、この先はどうなるか未定なので対象ファイルが複数でもコピーできる方法を教えていただいてよかったです。 またこちらで相談させていただくことがあると思います。 その折にはまたご指導いただけますようお願いいたします。 ありがとうございました。