applescriptでのファイルコピー

このQ&Aのポイント
  • 質問者はmacの知識がなく、最近applescriptという機能を知りました。使い方がわからず、ファイルコピーの方法について調査していました。質問サイトで見つけたコードを実行しましたが、エラーが発生しました。ボリューム名とファイルパスの入力方法がわからないです。
  • 質問者はmacmini serverを使用しています。macの知識が不足しているため、最近知ったapplescriptを使用してファイルコピーを自動化したいと考えています。特定のフォルダのファイルを別のフォルダにコピーする作業を行いたいのですが、試したコードでエラーが発生しました。マウントされているボリューム名やファイルパスの入力方法を教えてください。
  • macmini serverを使用してファイルコピーを自動化したいと思っていますが、applescriptの使い方がわからず困っています。特定のフォルダのファイルを別のフォルダにコピーするコードを見つけ、実行しましたが、エラーが発生しました。ボリューム名やファイルパスの入力方法がわからないため、解決策を教えてください。
回答を見る
  • ベストアンサー

applescriptでのファイルコピー

macmini server (SnowLeopard:OSX10.6) 上記機種を使用。 macの知識がなく、最近applescriptという機能を知りました。 使い方が全くわからない状態でしたが、 今回、NAS(マウント済み)にあるフォルダAの中のファイルBを macのServer HDの中にあるフォルダCへコピーする作業を 自動化させたいと思い、ファイルコピーの方法について調べていたところ、 とある質問サイトで下記のコードを見つけ、入力項目を埋めて実行しました。 が、「必要なボリュームがマウントされていません」とエラーがでました。 既にマウントしているのは確認しています。 恐らくボリューム名かファイルパスの入れ方が違うのかなと思い、 いろいろと試してみましたが、出来ませんでした。 ここでいうボリューム名とファイルパスとフォルダパスは どのような入れ方をすればよいのでしょうか? もしくは、他の原因であれば、その解決策を教えて頂けると 助かります。 すみませんが宜しくお願い致します。 ------ ペーストするコード (以下最後まで) -------------------- ----【入力項目】------------ set FromVolumName to "ボリューム名を入れる" ---(↑説明)コピー元となるファイルのあるボリューム名 set ToVolumName to "ボリューム名を入れる" ---(↑説明)コピー先となるフォルダのあるボリューム名 set FromCopyFile to "ファイルパスを入れる" ---(↑説明)コピー元となるファイルのパス set ToCopyFolder to "フォルダパスを入れる" ---(↑説明)コピー先となるフォルダのパス set CP_opt to "-f" ---(↑説明)cpコマンドのオプション ------------------------- tell application "Finder" set {MyMsg, MyIcn} to {"完了!", 1} if (exists disk FromVolumName) and (exists disk ToVolumName) then try do shell script "cp " & CP_opt & " " & quoted form of POSIX path of FromCopyFile & " " & quoted form of POSIX path of ToCopyFolder on error set {MyMsg, MyIcn} to {"なんらかのエラーです!", 0} end try else set {MyMsg, MyIcn} to {"必要なボリュームがマウントされていません!", 0} end if activate display dialog MyMsg buttons {"終了"} default button 1 with icon MyIcn end tell

  • Mac
  • 回答数1
  • ありがとう数3

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

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

AppleScriptを使わずに、単純にshell scriptを使うのが簡単だと思います。 まず、ターミナルを起動してくださいい。(アプリケーション/ユーティリティ フォルダの中にあります) cpの後にスペースを入れ、そのターミナルのウインドウにコピー元のファイルをドラッグします。 続いてコピー先のフォルダをドラッグします。 cp /xxx/xxx/xxx /yyy/yyy/yyy のようになると思います。改行キーで実行されます。 この場合コピー先に同じ名前のファイルがあれば上書きされますので注意してください。必要があれば-nなどのオプションを追加してください。 このコマンドをテキストファイルを作って、拡張子を.commandにしておくと、ダブルクリックで実行される様になります。 また、Automaterでshell scriptも書けますのでそれを利用することもできます。 cpコマンドを使いましたが、フォルダの中身全部とかの場合はrsyncコマンドが便利です。

-antsu-
質問者

お礼

ki073さん シェルスクリプトってすごく難しそうなイメージがあって これまでスルー状態でした。 教えて頂いた方法で試したところ、 ものすごく簡単にできました。 Automaterでも使えるんですね! おかげさまで、一歩前に進めそうです。 とても助かりました。 ありがとうございました。

関連するQ&A

  • 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
  • AppleScriptでpathを取得

    クリックしたファイルの絶対パスをクリップボードに保存する AppleScript(以下に記載)があるのですが、これでは クリップボードの中身が '/Users/ABC/Desktop/tmp1.jpg' '/Users/ABC/Desktop/tmp2.jpg' となります。 クオーテーション「 ' 」なしで、クリップボードに保存したいのですが どのようにすれば良いのでしょうか。 rest of characters of などを使ってどうにか組もうとしたのですが 初心者にはできませんでした。 どなたか、よろしくお願いします。 tell application "Finder" set theItems to "__OBJ_PATH__" set theResult to "" set old_delims to AppleScript's text item delimiters set AppleScript's text item delimiters to ":" set max to count of (every text item of theItems) repeat with num from 1 to max set theResult to theResult & quoted form of (text item num of theItems) if max > 1 and num < max then set theResult to "theResult" & " " end if end repeat set AppleScript's text item delimiters to old_delims set the clipboard to theResult end tell

  • フォルダアクションでアクセス権を変更

    フォルダアクションを設定し、そのフォルダにドラッグしたフォルダの アクセス権は変更出来たのですが、そのフォルダの中のファイルが どうしても同じ設定で変更できません。 on adding folder items to this_folder after receiving added_items do shell script "chgrp ○○○; chmod 777 " & quoted form of (POSIX path of added_items) password "PASSWORD" with administrator privileges end adding folder items to どなたかお解りになる方がいらっしゃいますでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • Mac
  • AppleScript、ファイルの移動について

    初心者です、以下の文で、デスクトップにある test.txt というファイルをアプリケーションフォルダーにある test というフォルダーに移動させたいのですが、エラーが出ます。 ------------------------------ tell application "Finder" set tgtFile to file "test.txt" of desktop move tgFile to folder "test" of applications folder with replacing end tell ------------------------------ エラー文 error "folder \"test\" of applications folder を取り出すことはできません。" number -1728 from «class cfol» "test" of At Ease applications folder ------------------------------ しっかりアプリケーションフォルダーにtestというファイルはあります。 改善法を教えてください<(_ _)>

    • ベストアンサー
    • Mac
  • AppleScript 添削希望

    以下のスクリプトを1回実行するとデスクトップにフォルダ「t01」ができるのですが、 2回目以降「t02」とはならず、「test」のままで止まってしまいます。 OS 10.5.8 です。どこか間違ってるのでしょうか。 tell application "Finder" duplicate folder "test" of folder "_test" of desktop to desktop with replacing try set name of folder "test" of desktop to "t01" on error try set name of folder "test" of desktop to "t02" on error try set name of folder "test" of desktop to "t03" end try end try end try end tell

    • ベストアンサー
    • Mac
  • AppleScriptで教えて欲しいです。

    現在、clipboardと同じ名前のフォルダー1つ(例:ABC123)のみ処理する。 →これを、clipboardの名前を含むフォルダー1つ(例:ABC123.4)のみ処理する。 に変更したいです。 ちなみにclipboardの名前を含むフォルダーは、1つしか存在しません。 申し訳ありませんが、実際の業務で使用している下記のスクリプト(無駄な部分も多少あるかと思いますが)を出来る限り変更を加えず、可能でしょうか? 無理であれば、大幅変更も可能ですので、ご教授の程、宜しくお願い致します。 global Num global fp set Num to the clipboard tell application "Finder" my shikyuseihan2data() --支給製版2課データ try duplicate fp to folder "data" of disk "HD" move fp to folder "jus:5)製版行き: 2課使用済" end try end tell --アクセス権 tell application "Terminal" activate do script with command "chmod -R 775 /Volumes/HD/data" quit end tell --支給製版2課のデータ on shikyuseihan2data() tell application "Finder" set x to name of every disk if "jus" is in x then else mount volume "afp://10.1.30.10/jus/" end if try set fp to "jus:5)製版行き:" & Num & ":" as text set fp to fp as alias end try end tell end shikyuseihan2data

    • ベストアンサー
    • Mac
  • AppleScriptでiCalを動かしてみたが

    以前に下記のようなAppleScriptがネット上に有りましたが(1999年12月28日) ----------------------------------------------実行 set dSta to my date "2013年6月4日火曜日 0:00:00" set dEnd to my date "2013年6月4日火曜日 16:00:00" -- 検索するカレンダー名 set calName to "仕事" -- 結果を格納する変数 set copyText to "" tell application "Calendar" set theList to every event of calendar calName whose (start date ≥ dSta) and (end date ≤ dEnd) repeat with x in theList set aDate to (start date of x) set copyText to copyText & (aDate as text) & tab & summary of x & (ASCII character 10) end repeat end tell -- 結果をクリップボードにコピー set copyText2 to my Sortsc(copyText) set the clipboard to copyText2 on Sortsc(aData) do shell script "echo " & quoted form of aData & " | sort -d" end Sortsc ------------------------------------------------------------- 今回これを利用したい思い osx10.8 applescript エディタ2.5.1にて起動してみようとしましたが下記のような不思議な現象がでました。 set dSta to my date "2013年6月4日火曜日 0:00:00" set dEnd to my date "2013年6月4日火曜日 16:00:00" としていますが date "1999年12月28日火曜日 0:00:00" and end date ≤ date "1999年12月28日火曜日 16:00:00" となってしまった。 なぜそうなったのかが分かりません。 どなたかご存知のお方がおられましたらご教授いただきたいのですが。 -----------------------------------返された値 tell application "Calendar" get every event of calendar "仕事" whose start date ≥ date "1999年12月28日火曜日 0:00:00" and end date ≤ date "1999年12月28日火曜日 16:00:00" --> {} end tell tell current application do shell script "echo '' | sort -d" --> "" end tell tell application "AppleScript Editor" set the clipboard to "" end tell ------------------------------------------------------------- 因にosx10.6 AppleScript2.3にはきちんと返された値は内容が取得されています。

    • ベストアンサー
    • Mac
  • バッチでファイルのコピーを行いたい

    バッチを利用してファイルのコピーを実施しようとしておりまあす あるフォルダ内にあるファイルをすべて別のフォルダに移動したいのですが、 このとき、 ・コピー対象のファイルは、MAXで11ファイル(cpfile1.csv-cpfile11.csv)ですが、すべて存在するとは限らない ・コピーに失敗したファイルは、あと2回コピーのリトライをする (MAX3回コピーを実施する) ・途中でコピーが失敗したファイルがあったとしても、フォルダ内のすべてのファイルに対してコピーを行う copy /Y c:A\cp_from\*.csv c:A\cp_to\*.csv で行おうとしたのですがこの場合、2回のリトライを行う方法が不明でした for文を利用して行うべきなのでしょうか? またその時にはどのように書けばよいのでしょうか> お分かりになられる方がおりましたら、ご教授お願いいたします

  • マウントしたディスクにcpで、所有者などがコピーできない。

    マウントしたディスクにcpで、所有者などがコピーできない。 Linuxサーバー上で、NFSマウントした外部ディスクに、cpコマンドでバックアップを取っています。(cronで夜間に実行) コピーは正しくおこなわれているのですが、  ・パーミッション  ・所有者  ・グループ が正しくコピーされておらず、ログには cp: failed to preserve ownership for `(ファイル名)': Operation not permitted と出ています。※権限がないと言ってることくらいは理解できます。 また、コピーされたファイルのユーザーと所有者は「nfsnobody」になっています。 パーミッションや所有者、グループも含めてコピーしたいと思っているのですが、どのようにすればよいのでしょうか? <補足> ・コピーは「cp -fpR」でやっています。 ・cronでシェルを起動してコピーを実行しています。 ・cronはrootで実行しています。 ・cronで実行せずに、直接シェルをたたいても同じです。 ・Red Hat Enterprise Linux Server release 5.3 (Tikanga)です ・コピー先も同じRedhatです。

  • フォルダ内のファイルのコピーについて

    ルートフォルダとサブフォルダ内のファイルのコピーについて 教えてください。 繰り返しの処理にてサブディレクトリ内のファイル名などの取得は 可能なのですが、コピーをしようとすると「書込みできません」の エラーになってしまいます。 Fname = fsoFile.Name 全ファイル名 objFso.CopyFile iFName &"\"& Fname, oFName,True iFName と oFName はそれぞれ、ダイアログで指定したフォルダの pathが入ります。 また、フォルダコピーであれば問題なくコピーされ、ファイル名を テキストにも出力できます。 objFso.CopyFolder iFName , oFName,True objT.WriteLine Fname 以上、宜しくお願いします。