我需要计算出大量硬盘驱动器上有多少容量——超过 150 个 USB 和 Thunderbolt 驱动器。我想我可以构建一个 AppleScript 或自动操作来获取卷的总大小,并减去“可用”。理想情况下,我可以启动脚本,它会监视要安装的卷,进行数学计算,并将其添加到运行总计中。
我们正在购买一台新服务器,我们很想知道我们需要在这台服务器上安装多大的驱动器才能保持所有这些资产的运行。
我对苹果脚本还很陌生,但我正在尝试。我什至找不到将查找已安装磁盘的 AS 字典项,更不用说进行添加数学运算了(即使它只是输出它拉入制表符分隔文件中的信息,我可以在 Excel 中计算)
事实上,也许这才是理想的版本。它会看到驱动器安装,获取名称,获取总容量,获取可用空间......完美世界?创建日期。然后将其添加到文本文件中。
代码、学习地点的指针——所有人都表示赞赏。
这是一个 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
下面的脚本设计为作为文件夹操作运行。如果您不熟悉这些,它们允许您监视指定文件夹的内容是否有任何更改,然后可以触发 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"
(您可以选择您喜欢的任何文件名,但您需要在创建的脚本中进行适当的更改)您的文件夹操作)。
您可能需要授予必要的可访问权限才能运行此脚本。
如果您遇到任何问题,请告诉我。