4 votos

lsof no muestra todos los archivos abiertos en la aplicación Vista Previa

Tengo unos 43 archivos abiertos en la vista previa, sin embargo, cuando ejecuto lsof -c Preview sólo obtengo una parte de los que están abiertos (es decir, 8 archivos).

Esta es la misma salida que obtengo cuando utilizo el Monitor de Actividad, pero me gustaría guardar la lista completa de archivos abiertos para poder reabrir esta lista de archivos más adelante.

He encontrado algunos consejos sobre cómo recuperar la lista de archivos actuales abiertos en este enlace .

¿Alguien tiene alguna pista de lo que puede estar ocurriendo? Otra solución que sería útil es recuperar la lista de archivos que se abrieron en la última sección Vista previa.

EDITAR:

Como comenta D. A. Vincent, es posible que los ficheros se cierren después de cargarse en memoria. Si es posible hacer un vigilante de los archivos abiertos por vista previa, y registrarlos en un archivo, esto sería una solución apropiada también. Especialmente si este hilo de vigilancia pudiera ser lanzado cuando el usuario inicia sesión o el sistema operativo se inicia.

2 votos

¿Esperamos que cada ventana abierta en Vista Previa tenga exactamente un archivo abierto como lo ve lsof? Aunque no soy un desarrollador con experiencia en Mac, parecería algo natural que Preview.app pudiera leer un archivo de imagen completo del disco a la memoria y luego realizar la llamada al sistema de cierre. Especialmente si Vista Previa estuviera mostrando docenas de archivos.

1 votos

¿Qué es el monitor de aplicaciones? ¿Quiere decir Monitor de Actividad?

1 votos

@DAVincent Tengo una ventana abierta para cada archivo, aunque sólo muestra algunos de ellos. ¿Quieres decir que la Vista Previa está cerrando los archivos y manteniendo la imagen en memoria? Entonces, otro enfoque sería hacer un watcher de los archivos abiertos por la aplicación Preview y escribirlo en algún log.

5voto

user556068 Puntos 8

Aquí tienes una solución applescript. Esto debería darle una lista completa de los archivos abiertos (incluyendo la ruta completa) en la aplicación de vista previa.

Además, si algún gurú de AppleScript se encuentra con esta respuesta, le agradecería cualquier crítica constructiva que tenga que ofrecer :)

set text item delimiters to "\n"
set myList to {}
tell application "Preview"
    set theDocs to get documents
    repeat with eachDoc in theDocs
        set thePath to path of eachDoc
        copy thePath to end of myList
    end repeat
end tell
set the_list to myList as text
tell application "Finder"
    set myFile to "/Users/YourName/YourFolder/FileName.txt"
    do shell script "date >> " & myFile
    do shell script "echo " & quoted form of the_list & " >> " & myFile
end tell

Esto imprimirá la fecha actual seguida de una lista de todos los documentos abiertos en Vista Previa. Si prefiere omitir la fecha, elimine la línea:

do shell script "date >> " & myFile

Asegúrese de rellenar la información correcta en la línea:

set myFile to "/Users/YourName/YourFolder/FileName.txt"

Si desea añadir un sello con la fecha a los nombres de los archivos, sólo tiene que poner las siguientes líneas bajo el campo tell application "Finder" bloque

set time_stamp to (do shell script "date \"+%m-%d-%y\"")
set myFile to "/Users/YourName/YourFolder/PreviewProfile_" & time_stamp & ".txt"

El terminal date dispone de muchos formatos diferentes. Para conocer las diferentes opciones disponibles, abra su terminal y escriba man strftime .

Después de jugar un poco más me doy cuenta de que este script se puede simplificar aún más. Esta es una versión más simplificada que evita algunos pasos innecesarios del original. Pero el resultado es el mismo de cualquier manera.

set text item delimiters to "\n"
tell application "Preview"
    set theDocs to get path of every document as text
    tell application "Finder"
        set time_stamp to (do shell script "date \"+%m-%d-%y\"")
        set myFile to "/Users/YourName/YourFolder/PreviewProfile_" & time_stamp & ".txt"
        do shell script "echo " & quoted form of theDocs & " >> " & myFile
    end tell
end tell

Para facilitar su uso, puede guardar este script como un servicio de Automator para utilizarlo mientras trabaja en cualquier aplicación. Para ello, basta con abrir Autómata - entonces del Archivo seleccionar menú Nuevo o ⌘N desde el teclado. A continuación, seleccione Servicio de las opciones mostradas. Cuando se abra el documento, seleccione Servicios en la columna de la izquierda. A continuación, seleccione Ejecutar AppleScript en la columna de la derecha. Pega este script en el cuadro que aparece. En las opciones desplegables de la parte superior de la página, seleccione El servicio no recibe ninguna entrada y en cualquier aplicación . A continuación, elija un nombre, guarde el archivo y debería tener un servicio disponible para utilizar en cualquier momento en el menú de servicios.

Actualización

He aquí una forma de leer y abrir la lista de archivos que acabamos de crear. Esto le permitirá elegir qué archivos desea abrir sin tener que abrir todos los archivos de la lista si no lo desea.

tell application "Finder"
    set file_list to {}
    set my_files to paragraphs of (read "/Users/YourName/path/to/YourFile")
    repeat with nextLine in my_files
        if length of nextLine is greater than 0 then
            copy nextLine to the end of file_list
        end if
    end repeat
    choose from list file_list with multiple selections allowed
    set chosen_Files to the result
    repeat with next_file in chosen_Files
        do shell script "open " & next_file
    end repeat
end tell

Espero que te ayude. Avísame si tienes algún problema.

1 votos

Muchas gracias, ¡ha funcionado! ¿Sería posible guardar este archivo como PreviewProfile-%date.txt ?

0 votos

Claro que sí. Consulta la respuesta actualizada.

1 votos

He votado por esta respuesta. Parece mejor que intentar crear algo usando lsof o facilidades de depuración a nivel de proceso.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X