Запустить окно Finder с выбранными конкретными файлами

Я пытаюсь программно запустить окно OS X Finder из проекта Xcode. Мне нужно, чтобы окно открывалось с определенной папкой и чтобы определенные файлы в этой папке автоматически выбирались.

Это похоже на функцию «Показать в Finder», используемую в Xcode и связанных приложениях.

Кто-нибудь знает, как это сделать в параметрах командной строки Objective-C, Swift, AppleScript или Finder?


person simon.d    schedule 04.10.2011    source источник
comment
@ user979133 Я был бы очень удивлен, если бы в Finder были какие-либо параметры командной строки, кроме тех, которые есть в каждом приложении Какао (единственные, о которых я знаю, добавляют пути к файлам для их открытия).   -  person Cajunluke    schedule 05.10.2011
comment
См. код Swift для запуска OS X Finder   -  person Hugo Pereira    schedule 03.01.2016
comment
Чтобы запустить OS X Finder и выбрать элементы с помощью Swift, перейдите к этому ответу. Запустите OS X Finder и выберите элементы с помощью Swift   -  person Hugo Pereira    schedule 03.01.2016


Ответы (8)


Версия Objective-C:

NSArray *fileURLs = [NSArray arrayWithObjects:fileURL1, /* ... */ nil];
[[NSWorkspace sharedWorkspace] activateFileViewerSelectingURLs:fileURLs];
person Wevah    schedule 05.10.2011
comment
Мне любопытно, почему это было отклонено; это именно то, о чем просил спрашивающий. - person Wevah; 05.10.2011
comment
Работает неплохо. Единственное, что у меня есть, это то, что массив представляет собой массив NSUrl. Это почти кажется очевидным, учитывая, что имя массива - fileURL, но я по какой-то причине вставил NSString с путем, и это привело к довольно впечатляющему сбою. Вместо этого создание NSUrl из строки пути (NSURL * url = [NSURL fileURLWithPath: fileToShow isDirectory: dir];) и последующее включение этого в массив работало отлично. - person John Bowers; 04.12.2012

Другой вариант AppleScript - команда Finder показать одновременно открывает окно с содержащейся папкой и выбирает элемент (ы). Если имеется несколько содержащихся папок, будет открыто несколько окон Finder.

tell application "Finder" 
   to reveal {someAlias, "path/to/POSIXfile" as POSIX file, etc}
person Community    schedule 06.10.2011

Быстрая версия:

let paths = ["/Users/peter/foo/bar.json"]
let fileURLs = paths.map{ NSURL(fileURLWithPath: $0)}
NSWorkspace.sharedWorkspace().activateFileViewerSelectingURLs(fileURLs)
person Klaas    schedule 11.03.2016

Я обнаружил, что activateFileViewerSelectingURLs не работает в Yosemite (по крайней мере, когда он находится отдельно от Finder). Это вызовет переключение в пространство Finder, но не будет выбирать URL-адрес. С использованием:

- `(BOOL)selectFile:(NSString *)fullPath inFileViewerRootedAtPath:(NSString *)rootFullPath` 

переключит пробелы из полноэкранного приложения и выберет путь.

person Joshua Fagans    schedule 31.03.2015
comment
Вероятно, это должен быть комментарий к принятому решению? - person Alex; 01.04.2015

Reveal multiple files in 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 и выбрать папку «Загрузки» и «Рабочий стол».

person Ninh Pham    schedule 19.07.2021

При открытии файла на path:

NSString* path = @"/Users/user/Downloads/my file"
NSArray *fileURLs = [NSArray arrayWithObjects:[NSURL fileURLWithPath:path], nil];
[[NSWorkspace sharedWorkspace] activateFileViewerSelectingURLs:fileURLs];
person maxisme    schedule 14.03.2017

Версия Swift 3.2 / 4.0:

NSWorkspace.shared.activateFileViewerSelecting([outputFileURL])
person UnchartedWorks    schedule 18.12.2017

person    schedule
comment
Это работает для отдельных файлов, но не для нескольких: open -R foo.jpg bar.jpg не будет выбирать одновременно foo.jpg и bar.jpg. - person mjs; 17.04.2015