如何使用applescript计算卷大小列表?

问题描述 投票:0回答:2

我需要计算出大量硬盘驱动器上有多少容量——超过 150 个 USB 和 Thunderbolt 驱动器。我想我可以构建一个 AppleScript 或自动操作来获取卷的总大小,并减去“可用”。理想情况下,我可以启动脚本,它会监视要安装的卷,进行数学计算,并将其添加到运行总计中。

我们正在购买一台新服务器,我们很想知道我们需要在这台服务器上安装多大的驱动器才能保持所有这些资产的运行。

我对苹果脚本还很陌生,但我正在尝试。我什至找不到将查找已安装磁盘的 AS 字典项,更不用说进行添加数学运算了(即使它只是输出它拉入制表符分隔文件中的信息,我可以在 Excel 中计算)

事实上,也许这才是理想的版本。它会看到驱动器安装,获取名称,获取总容量,获取可用空间......完美世界?创建日期。然后将其添加到文本文件中。

代码、学习地点的指针——所有人都表示赞赏。

macos scripting applescript volumes
2个回答
0
投票

这是一个 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

0
投票

下面的脚本设计为作为文件夹操作运行。如果您不熟悉这些,它们允许您监视指定文件夹的内容是否有任何更改,然后可以触发 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"
(您可以选择您喜欢的任何文件名,但您需要在创建的脚本中进行适当的更改)您的文件夹操作)。

您可能需要授予必要的可访问权限才能运行此脚本。

如果您遇到任何问题,请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.