从OS X文件引用URL别名获取路径(文件:///。文件/ id = ...)

时间:2016-05-20 16:34:55

标签: macos shell url path

在Apple Mac OS X上的PyQt4中,我们以下列格式获得拖放文件file reference URL

domain.com/main.js

有趣的是,这不是一个有效的文件URL,或者至少它在大多数应用程序中没有透明地解决 - 文件系统中没有file:///.file/id=123456.78901 文件。

只使用shell,如何将此NSURL或文件引用或别名(或其他任何名称)取消引用到文件系统上的文件的有效路径中?

5 个答案:

答案 0 :(得分:2)

可以在默认OS X安装中使用osascript AppleScript解释器,使用以下脚本运行:

osascript -e 'get posix path of posix file "file:///.file/id=123.456" -- kthxbai'

打印/Users/josh/Downloads/paste-10837081.py

答案 1 :(得分:2)

在Swift中,您可以使用URL.standardized从参考URL获取有效路径。所以在Swift 4中 - 要从拖放文件中获取文件名,你可以做类似......

let fileType = NSPasteboard.PasteboardType (kUTTypeFileURL as String)

extension NSPasteboardItem {
    func fileURL ()->URL? {
        if let refURL = self.string(forType: fileType) {
            return URL (fileURLWithPath: refURL).standardized
        }
        return nil
    }
}

答案 2 :(得分:0)

可惜你说'只是shell',因为这个答案取决于PyObjC:Foundation.NSURL.alloc().initWithString_(url).fileSystemRepresentation()
接受file:///.file/id=123456.78901
返回b'/Users/dave/Desktop/testbox/dest'

答案 3 :(得分:0)

这是一个NSURL对象,可以从中获取路径:

NSString *filePath = [fileURL path];

答案 4 :(得分:0)

这也可以使用 PyObjC 桥在 Python 中完成。

from Foundation import NSURL # depends on PyObjC

# convert a URL file reference to a POSIX path
NSURL.URLWithString_('file:///.file/id=6571367.8602676692').path()

# convert a path file reference to a POSIX path
NSURL.fileURLWithPath_('/.file/id=6571367.8602676692').path()

请务必为您的数据类型选择合适的 NSURL 方法,否则您会得到错误的值。

资源