你能从 shell 脚本实现 OS X 的 Finder 下载进度条吗?

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

起初我认为这可能是扩展属性的一些变体,可以使用 xattr 命令行工具进行修改。但是,我已经进行了多次测试,并且在此模式下文件似乎没有任何特殊属性。

这是否可以从命令行访问,或者只能从某些 cocoa api 中访问?

macos scripting finder xattr
3个回答
3
投票

如果您不介意使用 swift 编写脚本:

#!/usr/bin/env swift

import Foundation

let path = ProcessInfo.processInfo.environment["HOME"]! + "/Downloads/a.txt"
FileManager.default.createFile(atPath: path, contents: nil, attributes: [:])
let url = URL(fileURLWithPath: path)

let progress = Progress(parent: nil, userInfo: [
    ProgressUserInfoKey.fileOperationKindKey: Progress.FileOperationKind.downloading,
    ProgressUserInfoKey.fileURLKey: url,
])

progress.kind = .file
progress.isPausable = false
progress.isCancellable = false
progress.totalUnitCount = 5
progress.publish()

while (progress.completedUnitCount < progress.totalUnitCount) {
    sleep(1)
    progress.completedUnitCount += 1
    NSLog("progress %d", progress.completedUnitCount)
}

NSLog("Finished")

(Apple Swift 版本 4.1.2、Xcode 9.4)

感谢https://gist.github.com/mminer/3c0fbece956f3a5fa795563fafb139ae


1
投票

AFAIK,这一切都是通过 NSProgress 类(一个 Cocoa API)发生的,因此仅通过 shell 脚本实现它是不太可能的: https://developer.apple.com/library/ios/documentation/Foundation/Reference/NSProgress_Class/#//apple_ref/doc/constant_group/File_operation_kinds

Chrome 的实现方式如下(可能有更新的代码): http://src.chromium.org/viewvc/chrome?revision=151195&view=revision


0
投票

您可以使用

xattr
命令在纯 shell 脚本中执行此操作。

xattr -w com.apple.progress.fractionCompleted 0.654 file.ext

如果您检查正在进行的下载的 xattr,您会看到它,这里我使用的是 xattred 应用程序:

view of progress xattr value

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