lsof n'affiche pas tous les fichiers ouverts dans l'application Preview

3

J'ai environ 43 fichiers ouverts dans l'aperçu. Cependant, lors de l'exécution lsof -c Preview, je ne reçois qu'une fraction de ceux (8 fichiers) actuellement ouverts.

C’est le même résultat que lorsque j’utilise le Moniteur d’activités, mais j’aimerais enregistrer la liste complète des fichiers ouverts afin de pouvoir rouvrir cette liste ultérieurement.

J'ai trouvé quelques astuces pour récupérer la liste des fichiers ouverts dans ce lien .

Est-ce que quelqu'un a une idée de ce qui peut se passer? Une autre solution qui pourrait être utile consiste à récupérer la liste des fichiers ouverts dans la dernière section Preview.

MODIFIER:

Comme l'a commenté DA Vincent, il est possible que les fichiers soient fermés après leur chargement en mémoire. S'il est possible de créer un observateur des fichiers ouverts par aperçu et de les consigner dans un fichier, cela constituerait également une solution appropriée. Surtout si ce thread d'observation peut être lancé au moment de la connexion de l'utilisateur ou du système d'exploitation.

Werner
la source
2
Est-ce que nous nous attendons à ce que chaque fenêtre ouverte dans Preview ait exactement un fichier ouvert tel que vu par lsof? Bien que je ne sois pas un développeur Mac expérimenté, il semblerait naturel que Preview.app soit capable de lire un fichier image complet à partir du disque en mémoire, puis d'émettre l'appel système rapproché. Surtout si Preview montrait des dizaines de fichiers.
DA Vincent
1
Qu'est-ce que Application Monitor? Voulez-vous dire Activity Monitor?
DA Vincent
1
@DAVincent J'ai une fenêtre ouverte pour chaque fichier, même si elle n'en montre que quelques-uns. Vous voulez dire que l'aperçu ferme les fichiers et garde l'image en mémoire? Une autre approche serait donc de créer un observateur des fichiers ouverts par l’application Aperçu et de l’écrire dans un journal.
Werner
1
@DAVincent, oui, je parlais du moniteur d'activité.
Werner
1
Oui @Werner, vous avez compris où je voulais en venir. Nous pourrions créer un script pour regarder Preview.app. Il peut être difficile d'éviter une situation de concurrence critique dans laquelle Preview s'exécutait trop rapidement pour que l'observateur s'en aperçoive. Mais en extrapolant à partir de mon expérience passée avec d’autres ordinateurs, nous pourrions peut-être demander au script d’utiliser la fonctionnalité de débogage du système pour capturer chaque appel système effectué par Preview.
DA Vincent

Réponses:

3

Voici une solution AppleScript. Cela devrait vous donner une liste complète des fichiers ouverts (y compris le chemin d'accès complet) dans l'application de prévisualisation.

En outre, si un gourou AppleScript trouve cette réponse, je vous serais reconnaissant de toute critique constructive de votre part. :)

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

Ceci imprimera la date actuelle suivie d'une liste de tous les documents ouverts dans Aperçu. Si vous préférez omettre la date, supprimez simplement la ligne:

do shell script "date >> " & myFile

Assurez-vous de renseigner les informations correctes sur la ligne:

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

Si vous souhaitez ajouter une date à vos noms de fichiers, il suffit de mettre les lignes suivantes sous le tell application "Finder"bloc

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

La datecommande de terminal a beaucoup de formats différents disponibles. Pour en savoir plus sur les différentes options disponibles, ouvrez votre terminal et tapez man strftime.

Après avoir joué un peu plus, je me rends compte que ce script peut encore être simplifié. Ceci est une version plus simplifiée qui évite certaines étapes inutiles de l'original. Mais le résultat est le même dans les deux cas.

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

Pour faciliter l'utilisation, vous pouvez enregistrer ce script en tant que service Automator à utiliser lorsque vous travaillez dans une application. Pour ce faire, ouvrez simplement Automator - dans le menu Fichier , sélectionnez Nouveau ou ⌘N à partir du clavier. Ensuite, sélectionnez Service parmi les choix indiqués. Lorsque le document s'ouvre, sélectionnez Utilitaires dans la colonne de gauche. Sélectionnez ensuite Exécuter AppleScript dans la colonne à droite de celle-ci. Collez ce script dans la zone qui apparaît. Dans les choix déroulants situés en haut de la page, sélectionnez Le service ne reçoit aucune entrée et dans n’importe quelle application.. Ensuite, il vous suffit de choisir un nom, de sauvegarder le fichier et de disposer d’un service disponible à tout moment dans le menu Services.

Mettre à jour

Voici un moyen de lire et d’ouvrir la liste des fichiers que nous venons de créer. Cela vous permettra de choisir les fichiers que vous souhaitez ouvrir sans avoir à ouvrir tous les fichiers de la liste si vous ne le souhaitez pas.

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

J'espère que ça aide. Dites moi si vous avez le moindre problème.

I0_ol
la source
1
Merci beaucoup, cela a fonctionné! Serait-il possible de sauvegarder ce fichier sous PreviewProfile-%date.txt?
Werner
Sûr que vous pouvez. Vérifiez la réponse mise à jour.
I0_ol
1
J'ai voté pour cette réponse. Cela a l'air mieux que d'essayer de créer quelque chose en utilisant lsof ou des facilités de débogage au niveau du processus.
DA Vincent
Peut-être qu'il serait utile d'ajouter à votre réponse comment ouvrir plus tard les fichiers avec aperçu sur: cat ~/PreviewEnvironments/PreviewProfile_05-15-17.txt | while read; do echo "$REPLY"; open $REPLY; done. De cette façon, les espaces et autres caractères spéciaux sont préservés. Une autre modification que je ferais est de changer "/ Users / YourName" par "~", ce qui faciliterait l'utilisation du script par les débutants.
Werner
1
@Werner Voir ma mise à jour pour l'ouverture de fichiers dans la liste
I0_ol