как использовать applescript для расчета списка размеров томов?

Мне нужно выяснить, сколько на МНОЖЕСТВЕ жестких дисков - более 150 USB и дисков Thunderbolt. Я подумал, что могу создать AppleScript или действие автомата, чтобы получить общий размер тома и вычесть «доступный». В идеале я мог бы запустить сценарий, он бы следил за монтированием тома, выполнял эту математику и добавлял ее к нарастающей сумме.

Мы покупаем новый сервер, и мы хотели бы знать, какой объем диска нам нужен, чтобы поддерживать все эти активы в рабочем состоянии.

Я новичок в яблочном скрипте, но я пытаюсь. Я даже не могу найти элементы словаря AS, которые будут искать смонтированные диски, а тем более делать математику добавления (даже если он просто выводит информацию, которую он извлекает в файл с разделителями табуляции, который я мог бы вычислить в Excel)

На самом деле, может быть, это идеальный вариант. Он видит монтирование диска, получает имя, получает общую емкость, получает свободное место... идеальный мир? дата создана. Затем добавляет это в текстовый файл.

Код, указатели, где учиться - все приветствуется.


person Alex    schedule 12.10.2018    source источник
comment
Вы можете использовать агент запуска, чтобы определить, когда том был смонтирован, и команду оболочки diskutil info, чтобы получить информацию о свободном и доступном пространстве.   -  person vadian    schedule 12.10.2018


Ответы (2)


Вот решение AppleScript, которое вернет отображаемое имя и объем свободного места, доступного на каждом смонтированном томе.

set allMountedVolumesInfo to {}

tell application "System Events"
    set everyDisk to every disk
    repeat with i from 1 to count of everyDisk
        set thisDisk to displayed name of item i of everyDisk
        tell its disk thisDisk
            try
                set diskFreeSpace to (characters 1 thru 7 of ((free space / 1.0E+9) as string))
                set totalCapacity to (characters 1 thru 7 of ((capacity / 1.0E+9) as string))
                set creationDate to creation date
            on error errMsg number errNum
                set diskFreeSpace to (free space / 1.0E+9)
                set totalCapacity to (capacity / 1.0E+9)
                set creationDate to creation date
            end try
            set theRecord to {volume:thisDisk, free space:((diskFreeSpace & " Gigabytes") as string), creation date:creationDate, capacity:((totalCapacity & " Gigabytes") as string)}
        end tell
        set end of allMountedVolumesInfo to theRecord
    end repeat
end tell
person wch1zpink    schedule 12.10.2018

Приведенный ниже сценарий предназначен для запуска в качестве действия с папкой. Если вы не знакомы с ними, они позволяют отслеживать указанную папку на предмет любых изменений в ее содержимом, после чего может запускаться AppleScript для выполнения некоторых действий с элементами, которые были добавлены (или удалены) из отслеживаемой папки.

Всякий раз, когда кто-то монтирует диск, точка монтирования добавляется как элемент диска в папку /Volumes. Таким образом, вы можете настроить действие папки для просмотра содержимого папки /Volumes и запускать AppleScript всякий раз, когда монтируется новый том.

Вот сценарий, который предназначен для запуска:

use sys : application "System Events"
use scripting additions

property text item delimiters : tab
property fp : "~/Desktop/diskinfo.csv"

on adding folder items to Volumes after receiving D
    set D to a reference to the sys's disk named (item 1 of D)

    set f to a reference to sys's file fp
    if not (f exists) then initCSVFile(fp)

    set isod to the (current date) as «class isot» as string

    get the contents of {isod's text 1 thru 10, ¬
        isod's text 12 thru -1, ¬
        D's name, ¬
        gigabytes(D's capacity), ¬
        gigabytes(D's free space)} as text

    write the result & linefeed ¬
        to (f as alias) ¬
        starting at eof ¬
        as «class utf8»
end adding folder items to

to gigabytes(bytes)
    round bytes / (10 ^ 7)
    result / 100
end gigabytes

to initCSVFile(fp)
    local fp

    set f to make of sys new file with properties {name:fp}

    {"Date", "Time", "Volume Name", "Capacity (GB)", "Free Space (GB)"}
    write (result as text) & linefeed to (f as alias) as «class utf8»
end initCSVFile

Скопируйте и вставьте это в Редактор скриптов и сохраните как "New Volume Mounted.scpt" в папке ~/Library/Scripts/Folder Action Scripts, где ~ – ваш домашний каталог, например /Users/Alex. Если папки "Folder Action Scripts" не существует, создайте ее.

Если вы довольны созданием действия с папкой отсюда, сделайте это и смонтируйте новый том. Когда приведенный выше сценарий запускается, он добавляет текущую дату и время монтирования тома вместе с его именем, емкостью и количеством свободного места в конец файла diskinfo.csv на вашем рабочем столе (если файл не существует, сценарий создает его). Это файл CSV (значения, разделенные запятыми), в котором используются табуляции в качестве разделителей (так что на самом деле это TSV). QuickLook обычно может довольно хорошо отображать содержимое этих файлов:

Быстрый просмотр


Настройка действия папки

Если вы не знакомы с настройкой действия с папкой, прочтите раздел Attaching a Folder Action Script to a Folder документа Mac Automation Scripting Guide - Watching Folders.

Однако, чтобы сэкономить вам время, я также создал скрипт, который создаст для вас действие с папкой:

use sys : application "System Events"

property name : "Volumes"
property path : "/Volumes"
property folder action : a reference to folder action named (my name)
property script : "New Volume Mounted.scpt"
property folder : a reference to Folder Action scripts folder
property file : a reference to the file named (my script) in my folder

set folder actions enabled to true

if not (my file exists) then return open my folder
if my folder action exists then return my folder action's scripts

make new folder action with properties {name:my name, path:my path}
tell my folder action to make new script with properties ¬
    {name:my file's name, POSIX path:my file's POSIX path}

set my folder action's enabled to true
set my folder action's scripts's enabled to true

Снова скопируйте и вставьте это в новый документ в Редакторе скриптов, а затем запустите его. Делайте это только после того, как вы сохранили первый скрипт в указанное мной место, и дважды проверьте имя файла "New Volume Mounted.scpt" (вы можете выбрать любое имя файла, которое вам нравится, но вам нужно будет внести соответствующие изменения в скрипт, который создает вашу папку действие).

Возможно, вам потребуется предоставить необходимые привилегии доступа для запуска этого скрипта.

Если у вас возникнут какие-либо проблемы, дайте мне знать.

person CJK    schedule 12.10.2018