Запустите окно OSX Finder с выбранными файлами
Я пытаюсь программно запустить окно OSX Finder из проекта XCode. Мне нужно, чтобы окно открывалось в определенную папку, и в ней автоматически выбирались определенные файлы.
Кто-нибудь знает, как это сделать в параметрах командной строки target c, applecript или Finder?
Спасибо!
8 ответов
Версия Objective-C:
NSArray *fileURLs = [NSArray arrayWithObjects:fileURL1, /* ... */ nil];
[[NSWorkspace sharedWorkspace] activateFileViewerSelectingURLs:fileURLs];
Другая разновидность AppleScript - команда открытия Finder откроет окно для содержащей папки и выберет элемент (ы). Если имеется несколько содержащих папок, будут открыты несколько окон Finder.
tell application "Finder" to reveal {someAlias, "path/to/POSIXfile" as POSIX file, etc}
Swift версия:
let paths = ["/Users/peter/foo/bar.json"]
let fileURLs = paths.map{ NSURL(fileURLWithPath: $0)}
NSWorkspace.sharedWorkspace().activateFileViewerSelectingURLs(fileURLs)
Показать несколько файлов в Finder
В качестве
open -R <path-to-reveal>
работает только для одного файла. Вместо этого мы можем использовать Apple Script.
Из ответа пользователя866649 мы можем перенести его в сценарий оболочки следующим образом:
osascript -e 'tell application "Finder" to reveal {"path/to/file1" as POSIX file, "path/to/file2" as POSIX file} activate'
Только что создал служебный скрипт:
finder.sh
#!/usr/bin/env bash
join() {
local d=$1 s=$2
shift 2 && printf %s "$s${@/#/$d}"
}
lst=()
for f in "$@"; do
lst+=("\"$f\" as POSIX file")
done
files=$(join , "${lst[@]}")
osascript -e "tell application \"Finder\" to reveal {$files} activate"
Тогда попробуйте:
chmod +x finder.sh
./finder.sh ~/Downloads ~/Desktop
Он должен открыть Finder и выбрать папку «Загрузки» и «Рабочий стол».
Я обнаружил, что activFileViewerSelectingURLs не работает на Yosemite (по крайней мере, когда в отдельном пространстве от Finder). Это приведет к переключению в пространство Finder, но, похоже, не выберет URL. С помощью:
(BOOL)selectFile:(NSString *)fullPath inFileViewerRootedAtPath:(NSString *)rootFullPath
переключит пробелы из полноэкранного приложения и выберет путь.
При открытии файла в path
:
NSString* path = @"/Users/user/Downloads/my file"
NSArray *fileURLs = [NSArray arrayWithObjects:[NSURL fileURLWithPath:path], nil];
[[NSWorkspace sharedWorkspace] activateFileViewerSelectingURLs:fileURLs];
Swift 3.2/4.0 версия:
NSWorkspace.shared.activateFileViewerSelecting([outputFileURL])