Comprobando la existencia de archivos ocultos en AppleScript

5

Puedo verificar si existe un archivo usando AppleScript. Pero estoy teniendo problemas con los archivos ocultos. ¿Hay alguna forma especial de hacer esto?

set home_path to (path to home folder as text)
set hiddenFile to home_path & ".test"

tell application "Finder"
    if not (exists file hiddenFile) then
        display dialog ".test does not exist."
    end if
end tell
    
pregunta Fed 21.02.2017 - 17:32

3 respuestas

7

Reemplazar el buscador con eventos del sistema:

set home_path to (path to home folder as text)
set hiddenFile to home_path & ".test"

tell application "System Events"
    if exists file hiddenFile then
        display dialog ".test does exist."
    else
        display dialog ".test does not exist."
    end if
end tell

y funciona.

    
respondido por el klanomath 21.02.2017 - 18:29
4

También puede llamar en línea al comando de shell dentro de AppleScript sin la necesidad de crear scripts de bash separados. Aquí hay un ejemplo:

set home_path to (path to home folder as text)
set fileName to ".viminfo"
set hiddenFile to home_path & fileName

tell application "Finder"
    if not (exists file hiddenFile) then
        try
            set output to do shell script "[ -f " & quoted form of POSIX path of hiddenFile & " ];"
        on error
            display dialog fileName & " does not exist."
        end try
        display dialog fileName & " does exist."
    end if
end tell

Este AppleScript usa bash [ -f $PATH ]; para verificar si el archivo existe. También usa try , porque tiene que "capturar" un error: si el archivo no existe, se produce un error y el script se detiene.

    
respondido por el Mateusz Szlosek 21.02.2017 - 18:25
2

Por lo tanto, no sé cómo hacer esto con AppleScript nativo, pero como las Mac usan Bash, puedes usar un script de shell para realizar la búsqueda. No es ideal, pero es mejor que nada.

Por lo tanto, su script de shell irá a cd , cambiar directorio, a la carpeta que necesita buscar. Luego, ejecutará el comando ls , que enumera los contenidos de un directorio. el indicador -a en ls le indica que enumere los elementos ocultos. Las herramientas de Bash usan un concepto llamado entrada / salida estándar para obtener entrada y mostrar salida. La salida estándar se muestra en la pantalla de manera predeterminada, pero se puede redirigir mediante una herramienta llamada canalización para ir a otro lugar. En este caso, en lugar de mostrar una lista de todos los archivos en un directorio, vamos a canalizar esa lista en una herramienta de búsqueda llamada grep . Esa explicación fue algo detallada, pero su script de shell solo necesita 3 líneas (la primera de las cuales es posiblemente innecesaria en este caso):

#!/bin/bash                                   # define the shell, not really needed because bash is the default shell but good practice
cd /path/to/search/directory                  # cd to the proper place
ls -a | grep "the text you're looking for"    # list all files (including hidden ones) and pipe output into grep, a search tool

Guarde esto como algo lógico, como findFile.sh , luego hágalo ejecutable con este comando en la aplicación de terminal

chmod +x /path/to/findFile.sh

Así que ya está listo para ir al AppleScript.

Como dije, no tengo tanta experiencia con AppleScript, pero como lo entiendo, ejecutaría el script de shell como este

set output to do shell script "/path/to/findFile.sh"

entonces la variable output contendría cualquier texto que haya encontrado grep. Tu prueba para saber si el archivo existe o no es ahora si output contiene texto.

Siéntase libre de ejecutar man grep en el terminal para el manual grep para ver más sobre cómo funciona y con qué se ajusta y cómo hacer coincidir solo los archivos con ciertas extensiones y cosas por el estilo. Quizás quieras jugar con las cosas en grep para tener una idea de cómo funciona.

Espero que alguien pueda venir junto con una respuesta a su pregunta en AppleScript.

Referencias:

respondido por el Chuck Dries 21.02.2017 - 17:55

Lea otras preguntas en las etiquetas