4

Mac Os X の /Users フォルダーのバックアップ イメージを作成する AppleScript を作成しています。

  1. シェル スクリプトの実行中にバーバー ポール プログレス バーを表示し、終了オプションを指定します。
  2. スクリプトの実行中に終了するオプションを含むダイアログ ボックスを表示します。

/dev/null を指定してシェル スクリプトを実行しようとしましたが、すべての出力が無視されます。出力を保存して、ユーザーのダイアログに表示したいと思います。

これが私のコードです:

set computername to (do shell script "networksetup -getcomputername")
set fin to ""
set theIcon to note
tell application "Finder"
    try
        set folderalias to "/Users"
        set foldersize to physical size of folder (alias ":Users") --(info for folderalias) 
        set foldersize to (round ((foldersize / 1.0E+9) * 100)) / 100
    on error
        tell application "System Events"
            set foldersize to (round (((get physical size of folder ":Users" as text) / 1.0E+9) * 100)) / 100
        end tell
    end try
end tell

display dialog "User profile backup utility" & return & return & ¬
    "The computer name is: " & computername & return & return & ¬
    "The '/Users/' directory size is: " & "~" & foldersize & " GB" & return & return & ¬
    "Would you like to backup the '/User' directory now?" & return ¬
    buttons {"Cancel", "Backup Now"} default button "Backup Now"
set comd to "hdiutil create ~/Desktop/" & computername & ".dmg -srcfolder /test/"
set fin to do shell script (comd) with administrator privileges
display dialog fin
4

2 に答える 2

5

進行状況バー ダイアログを表示することは、オンボードの AppleScript (つまり、標準の追加) では不可能ですが、シェーン スタンレーのASObjC Runnerを使用して実現できます。コマンド。システムにダウンロードしたら、

tell application "ASObjC Runner"
    reset progress
    set properties of progress window to {button title:"Abort Backup", button visible:true, message:"Backing up the '" & (POSIX path of folderalias) & "' directory.", detail:"There are " & foldersize & " GB of data to backup – this might take some time.", indeterminate:true}
    activate
    show progress
end tell
try -- to make sure we destroy the dialog even if the script error out
    <your backup operation here>
end try   
tell application "ASObjC Runner" to hide progress

バックアップ操作が実行されている間、不確定な進行状況バー (または「バーバー ポール」) が表示されます – 少なくともそれが同期している場合 (AS から呼び出されるシェル コマンドのように)。コマンドによって自動的に返されるシェル コマンドの出力に関しては、コードでは [ ASObjC Runnerのドキュメントから多かれ少なかれ大規模に持ち上げられたコード]do shell scriptに割り当てられます。fin

ASObjC Runnerは、AppleScript アプリケーションに埋め込むことができます (スクリプトをAppleScript Editorでアプリケーションとして保存します)。それをバンドルのResourcesフォルダーに配置し (Finderで、コンテキスト メニューの[パッケージの内容を表示] を選択します)、path to resourceコマンドを使用してusing terms fromブロック内で呼び出します。 – 上記でリンクしたドキュメントには詳細とサンプル コードがありますが、決定的に重要なエラーが 1 つあります。それは、tellステートメントでリソース バンドル( tell application (POSIX path of (path to resource "ASObjC Runner.app"))) への POSIX パスを使用する必要があることです。

コードに関するいくつかの注意事項:

  • /Usersフォルダーへのエイリアスを取得するよりエレガントな方法があります。

    path to users folder
    

    – ハードワイヤリングやFinderへの呼び出しは不要です。POSIX path of次に、 を使用するか、または引用符が必要な場合は、それを使用して、そのシェル互換パスを取得できますquoted form of POSIX path of

  • System Eventsのみを使用して取得することをお勧めします – Finderphysical sizeとは異なり、バックグラウンドで動作します。これにより、 andブロックを取り除くことができます(とにかく、それによって何を達成するつもりだったのかわかりません – に反応していた場合、それは がブロック内に配置されるのを好まないためです)。tell application "Finder"try … catcherror -10004roundtell
  • fin空の文字列に初期化する必要はありません– から戻り値を取得しdo shell scriptます。
  • あなたのと言えば、その名前のスペースで壊れる変数do shell scriptを引用する必要があります。computerName
  • theIcon使用されることはありません。
  • メッセージの最初の部分が強調されているため、ユーザー確認のdisplay alert代わりに使用することをお勧めします。display dialog
  • コードには不要な括弧がたくさんあります。AppleScript では、セマンティック コマンド ブロックを区切るためにこれらのいくつかが必要ですが、すべてではありません…</li>

まとめると、コードを次のように変更できることを意味します。

set computerName to do shell script "networksetup -getcomputername"
set folderAlias to path to users folder
tell application "System Events" to set folderSize to physical size of folderAlias
set folderSize to round(folderSize / 1.0E+9 * 100) / 100

display alert "User profile backup utility" message ¬
  "The computer name is: " & computerName & return & return & ¬
  "The '" & (POSIX path of folderAlias) & "' directory size is: " & "~" & folderSize & " GB" & return & return & ¬
  "Would you like to backup the '" & (POSIX path of folderAlias) & "' directory now?" & return ¬
  buttons {"Cancel", "Backup Now"} default button "Backup Now"
set shellCmd to "hdiutil create ~/Desktop/'" & computerName & "'.dmg -srcfolder /test/"
-- progress bar dialog display initialization goes here
try
    set shellOutput to do shell script shellCmd with administrator privileges
end try
-- progress bar dialog hiding goes here
display dialog shellOutput
于 2012-05-10T12:30:39.853 に答える
1

kopischke の提案ほどきれいではありませんが、進捗情報を取得する手っ取り早い汚い方法は、ターミナル自体でコマンドを実行することです。

set comd to "hdiutil create -puppetstrings '~/Desktop/" & computername & ".dmg' -srcfolder '/test/'"
tell application "Terminal" to do script comd
于 2012-05-10T17:59:19.853 に答える