AppleScript: ¿Cómo buscar archivos en carpetas para cadenas y mostrar resultados en Finder?

Estoy tratando de crear un servicio basado en Automator que busque en mi computadora el texto seleccionado. (Cuando digo "mi computadora", me refiero específicamente a Macintosh HD, no a esta Mac , porque esta Mac incluye discos duros externos).

Me gustaría que los resultados de la búsqueda aparecieran en una nueva ventana del Finder.

¿Es posible lograr esto mediante programación en Applescript o en un script de shell? Esto no parece posible, pero sería ideal.


Si esto no se puede hacer realmente mediante programación, estaría de acuerdo con lograr esto "manualmente". Aquí hay un ejemplo de cómo esa ruta podría manifestarse:

tell application "Finder"
    activate
    open (POSIX file "/")
end tell

tell application "System Events"
    keystroke "f" using command down
    keystroke input
end tell

Sin embargo, no sé cómo cambiar el directorio de búsqueda. (Estoy tratando de evitar los clics del mouse con secuencias de comandos). De forma predeterminada, cuando un usuario inicia una búsqueda en Finder (por ejemplo, cuando el usuario presiona +), el ⌘ commanddirectorio Fde búsqueda es "Esta Mac", independientemente del directorio de la ventana de Finder. que la función de búsqueda fue llamada.

He actualizado mi respuesta, consulte la sección: Una alternativa es dejar la preferencia predeterminada del Finder para Al realizar una búsqueda: para Buscar esta Mac y hacer lo siguiente:

Respuestas (1)

Si no le importa cambiar una preferencia particular del Finder , es decir, al realizar una búsqueda: , lo siguiente funcionará.

Primero, en Finder > Preferencias... > Avanzado , configure Al realizar una búsqueda: para: Buscar en la carpeta actual

A continuación, cree un flujo de trabajo de Automator Service con su configuración predeterminada (el servicio recibe el texto seleccionado en cualquier aplicación) y agregue una acción Ejecutar AppleScript , reemplazando el código predeterminado con el siguiente código :

on run {input, parameters}
    tell application "Finder"
        activate
        open (POSIX file "/")
    end tell
    delay 0.5 -- # Adjust as necessary or comment out/remove if not needed.
    tell application "System Events"
        keystroke "f" using command down
        keystroke input as text
        keystroke return
    end tell
end run

Guarde el flujo de trabajo de Automator Service , por ejemplo, Buscar texto seleccionado en Finder


Si desea agregar una prueba programática y un cambio de preferencia para Al realizar una búsqueda: estar configurado para Buscar en la carpeta actual , agregue el siguiente código directamente después on run {input, parameters}y antes del tell application "Finder"bloque.

if (do shell script "defaults read com.apple.finder FXDefaultSearchScope") is not "SCcf" then
    do shell script "defaults write com.apple.finder FXDefaultSearchScope SCcf; killall Finder"
    delay 1 -- # Adjust as necessary or comment out/remove if not needed.
end if

Una alternativa es dejar la preferencia predeterminada del Finder para Al realizar una búsqueda: para Buscar en esta Mac y hacer lo siguiente:

  • Abra una nueva ventana del Finder para Macintosh HD .
  • Presione: ⌘F
  • En la barra de búsqueda , haga clic en el botón "Macintosh HD" .
  • En la barra de búsqueda , haga clic en el botón Guardar .

Siga para guardar la búsqueda. En este caso, por ejemplo:

  • Guardar como: Buscando “Macintosh HD”
  • Dónde: Búsquedas guardadas
  • [] Agregar a la barra lateral (sin marcar)

En la acción Ejecutar AppleScript del flujo de trabajo de Automator Service , reemplácelo con el siguiente código de ejemplo , ajustado para su sistema y cómo/dónde guardó la búsqueda: open (POSIX file "/")

open POSIX file "/Users/me/Library/Saved Searches/Searching “Macintosh HD”.savedSearch"

El código AppleScript de ejemplo sería entonces:

on run {input, parameters}
    tell application "Finder"
        activate
        open POSIX file "/Users/me/Library/Saved Searches/Searching “Macintosh HD”.savedSearch"
    end tell
    delay 0.5 -- # Adjust as necessary or comment out/remove if not needed.
    tell application "System Events"
        keystroke "f" using command down
        keystroke input as text
        keystroke return
    end tell
end run

Este último método deja solo la configuración predeterminada en Finder y logra el objetivo sin hacer clic con el mouse ni hacer clic en los botones del flujo de trabajo de Automator Service .


Nota: El código AppleScript de ejemplo es solo eso y puede requerir comandos adicionales donde sea apropiado/necesario, por ejemplo, entre los comandos como/si es necesario. delay keystroke