• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:applescriptでファイルをコピー)

applescriptでファイルをコピーする方法について

このQ&Aのポイント
  • applescriptを使用して、複数のファイルを効率的にコピーする方法を教えてください。
  • ファイルのフルパスを集めたapplescriptを作成しましたが、ターミナルでのコピーコマンドだとファイル数が増えると処理が遅くなります。
  • ファイルサイズは1M以下から15M程度です。負荷をかけずに複数のファイルをコピーするための効率的な方法を教えてください。

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

  • ベストアンサー
  • sevenless
  • ベストアンサー率66% (374/561)
回答No.2

やはりシステムに一番負担をかけないのはシェルコマンド(ターミナルのコマンド)でしょう。 AppleScript や Automator は実行速度も遅いですし、多数の処理を行った場合、前の処理が終わる前に次の処理を行ったりして、想定外の動きをするおそれがないとは言えません。 さほど複雑な処理でもないですし、シェルコマンドを自動化したシェルスクリプトを使うのがベストだと思います。 前準備として、コピーすべきファイルのリストをテキストファイルとして書き出しておきます。この時に、区切り文字を半角スペースから UNIX タイプの改行 (LF) に変えておけば、後が簡単になります。 "/home/documents/xxxxx /home/pic/yyyyy ...." というリストが FileList という文字列変数に入っているとして、 set oldDel to AppleScript's text item delimiters set AppleScript's text item delimiters to " " set myList to text items of FileList set AppleScript's text item delimiters to (ASCII character 10) set newFileList to (myList as string) & (ASCII character 10) set AppleScript's text item delimiters to oldDel tell application "Finder" set TextFile to open for access ((desktop as text) & "FileList.txt") with write permission write newFileList to TextFile close access TextFile end tell という AppleScript を実行すれば、デスクトップに FileList.txt というファイルとして書き出されます。 エディタで開いてみて /home/documents/xxxxx /home/pic/yyyyy .... (改行は LF) となっていることを確認してください。 前準備が終わったところでシェルスクリプトの作成ですが、以下のテキストを適当なエディタで入力してセーブしてください。この時も改行コードが UNIX タイプ (LF) になるように注意してください(重要!) -----------ここから----------- #!/bin/sh while read line do cp $line ~/test done < ~/Desktop/FileList.txt -----------ここまで----------- これを例えば filecollect.sh という名前でセーブしたとしましょう。 あとはターミナルで sh filecollect.sh と打てば、FileList.txt に記述したファイルが順番に ~/test にコピーされます。 chmod u+x filecollect.sh として実行可能ファイルにすれば、 filecollect.sh とタイプするだけで実行できます。

noname#71371
質問者

お礼

ありがとうございました。 無事に解決しました。 while read line の処理は私も思ったのですが、負荷がかかりすぎると思いこんでいました。 逆だったんですね。 助かりました。

その他の回答 (2)

  • sevenless
  • ベストアンサー率66% (374/561)
回答No.3

追加です。 AppleScript 中に do shell script "sh filecollect.sh" と記述してしまうのも手ですね。

  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.1

自分ならターミナルで駆動する、いわゆる「.sh」にしちゃうけど。。。 つまり >cp "/home/documents/xxxxx"_"/home/pic/yyyyy"_ ~/test これを羅列してあるバッチを作るって話。 具体的なscriptは、質問文に何も試した後が無いのでまるまると書いてあげると違反だから無理だけど考えはそんな感じ。

noname#71371
質問者

お礼

ありがとうございました。 参考にさせていただきます

関連するQ&A