3 votes

Comment trouver tous les fichiers PDF modifiés

J'ai un dossier de plus de 6000 fichiers PDF (chapitres, articles, etc.). J'essaie de trier ceux que je viens de télécharger mais que je n'ai jamais annotés. Y a-t-il un moyen de le faire? Ces PDF que je n'ai jamais annotés ont généralement les mêmes dates de "création" et de "modification", donc je pensais que ces critères pourraient être utilisés (c'est-à-dire, rechercher des fichiers dont la date de modification est ultérieure/ différente de la date de création), mais je ne sais pas comment le faire.

En d'autres termes, j'ai besoin de pouvoir trouver tout PDF sur mon ordinateur qui a été modifié.

Merci pour toute aide!

0 votes

Qu'est-ce que vous souhaitez faire avec les fichiers PDF trouvés qui répondent aux critères? Je demande car en utilisant Automator, il a trouvé, en 2,5 secondes, les 108 fichiers PDF parmi les 1 181 de mon dossier Documents qui ont été modifiés après leur création. Je peux vous donner le flux de travail dans une réponse, mais en sachant comment vous voulez les informations et/ou ce que vous voulez faire avec les fichiers trouvés, je pourrais étendre le flux de travail avant de le publier.

0 votes

@user3439894 Idéalement, je pourrais avoir un flux de travail complet qui a) trouve tous les PDF modifiés (c'est-à-dire, avec des annotations Skim), b) les exporte avec des notes intégrées (ce qui rendra les annotations lisibles dans Aperçu, PDFpen, etc.), c) supprime le PDF original, et d) conserve le PDF nouvellement converti dans le même emplacement de dossier que celui qu'il a remplacé. Ou si Finder me montre simplement les PDF modifiés, je pourrais prendre les choses en main, bien que de manière moins efficace. J'ai déjà un droplet qui fait l'exportation avec des notes intégrées... J'ai juste besoin d'un moyen d'identifier les fichiers modifiés. J'espère que cela a du sens.

0 votes

D'accord, je pars pour la soirée donc je n'ai pas le temps de faire tout ce qui a été présenté dans votre commentaire, donc je vais publier les informations que j'ai et vous pouvez voir si vous pouvez les améliorer, car je n'aurai pas de temps avant demain (selon l'heure à laquelle je reviendrai ce soir). Dans Automator, créez un nouveau flux de travail et ajoutez une action Rechercher des éléments du Finder avec les paramètres, par exemple, Recherche (Documents) > (Tout) > (Type)(est)(PDF). Ajoutez une action Exécuter un script Apple, remplacez le code par défaut par le code AppleScript suivant, que vous devez d'abord exécuter comme une commande dans Terminal pour le diviser en lignes de code individuelles:

3voto

user3439894 Points 52496

Conformément aux informations dans le message original et aux commentaires, ceci sera fait comme demandé.

Dans Automator:

  • Créez un nouveau Workflow.
  • Ajoutez une action Rechercher des éléments du Finder .
    • Avec les paramètres, par exemple, Recherche (Documents)
    • (Tout) des éléments suivants sont vrais
    • (Type) (est) (PDF)
  • Ajoutez une action Exécuter un script Apple .

    • Remplacez le code par défaut par le code AppleScript exemple suivant affiché ci-dessous:

    • Note: Si Skim n'est pas dans le dossier /Applications, alors modifiez la valeur de la skimpdfPathFilename variable en conséquence. Vous ne devriez pas avoir besoin de modifier autre chose sauf si vous voulez définir la valeur de la offsetInSeconds variable, par exemple définir offsetInSeconds à 60, à une autre valeur. Cette variable est utilisée pour aider à trouver les fichiers qui ont vraiment été modifiés depuis leur création. La différence de granularité entre la date de création et la date de modification lorsqu'un fichier est créé peut être de 0 secondes à une valeur plus élevée, qui n'est pas une valeur constante en fonction de la façon dont le fichier a été créé. Faites les ajustements nécessaires pour votre cas d'utilisation.

Ce que le Workflow et le code AppleScript exemple font:

  • Recherche tous les fichiers PDF dans le dossier cible, y compris tous les sous-dossiers.
    • Cela se fait avec l'action Rechercher des éléments du Finder et sa sortie est transmise à l'action Exécuter un script Apple.
  • Crée une liste de tous les fichiers PDF qui ont été modifiés après la date de création, en fonction de la valeur de la offsetInSeconds variable.
    • Cela se fait dans la première répétition boucle. Les fichiers répondant aux critères sont stockés dans modifiedFilesList pour être utilisés dans la prochaine répétition boucle.
  • Crée une liste de tous les fichiers pour lesquels des annotations ont été faites dans Skim.
    • Cela se fait en utilisant xattr pour récupérer les attributs étendus des fichiers cibles. Si un fichier possède les attributs étendus cibles, un drapeau est défini sur true et s'il ne l'a pas, il est défini sur false. Les fichiers marqués comme true vont dans annotatedSkimFilesList pour être utilisés dans la prochaine répétition boucle.
  • Intègre les annotations effectuées sur les fichiers dans Skim.
    • En utilisant l'utilitaire skimpdf dans Skim sur les fichiers dans annotatedSkimFilesList, les annotations sont intégrées sur place. Ainsi, pas besoin d'exporter vers un deuxième fichier, puis de supprimer l'original et de le remplacer.

REMARQUE: Bien que j'ai testé ceci et qu'il fonctionne sans problème pour moi, ne l'exécutez pas avant d'être sûr d'avoir une sauvegarde appropriée! Vous devriez également tester le flux de travail sur un petit échantillon de fichiers copiés placés en dehors du dossier de recherche réel sur lequel le flux de travail sera exécuté après que les tests sont effectués.


Exemple code AppleScript exemple :

on run {input, parameters}

    set skimpdfPathFilename to "'/Applications/Skim.app/Contents/SharedSupport/skimpdf'"

    set offsetInSeconds to 60       
    set modifiedFilesList to {}
    set annotatedSkimFilesList to {}

    repeat with i from 1 to count input
        set fileInfo to info for item i of input
        set cDate to creation date in fileInfo
        set mDate to modification date in fileInfo
        if mDate > (cDate + offsetInSeconds) then
            set end of modifiedFilesList to POSIX path of item i of input
        end if
    end repeat

    repeat with i from 1 to count modifiedFilesList
        set withNotes to (do shell script "xattr " & quoted form of item i in modifiedFilesList ¬
            & " | [ $(grep -c \".*_notes$\") -ge 1 ] && printf 'true' || printf 'false'") as boolean
        if withNotes then
            set end of annotatedSkimFilesList to item i in modifiedFilesList
        end if
    end repeat

    repeat with i from 1 to count annotatedSkimFilesList
        do shell script skimpdfPathFilename & space & "embed" & space & ¬
            quoted form of item i in annotatedSkimFilesList
    end repeat

end run

Compréhension de la do shell script commande dans la deuxième répétition boucle:

Lorsqu'un PDF est annoté dans Skim et enregistré, des attributs étendus sont définis sur le fichier, par exemple:

$ xattr NomDuFichier.pdf 
com.apple.FinderInfo
net_sourceforge_skim-app_notes
net_sourceforge_skim-app_rtf_notes
net_sourceforge_skim-app_text_notes
$ 

La sortie est pipée | vers:

[ $(grep -c \".*_notes$\") -ge 1 ] && printf 'true' || printf 'false'

Cela teste la sortie de grep en comptant les occurrences du patron et si grep trouve une ou plusieurs occurrences du patron, alors la valeur de la withNotes variable est définie sur true, tandis qu'elle est définie sur false sinon.

Remarquez que Skim a un utilitaire en ligne de commande intégré, par exemple /Applications/Skim.app/Contents/SharedSupport/skimnotes qui peut être utilisé pour tester si un PDF contient des annotations faites dans Skim, cependant en raison de sa sortie cet utilitaire est mieux utilisé dans un script shell exécuté dans Terminal puis une do shell script commande, et c'est pourquoi j'ai utilisé xattr et grep à la place.


Note: Le code AppleScript exemple ci-dessus est simplement cela, et ne comprend pas de gestion des erreurs comme cela peut être approprié/nécessaire/souhaité, la responsabilité incombe à l'utilisateur d'ajouter toute gestion des erreurs appropriée pour tout code exemple présenté et/ou code écrit par l'utilisateur lui-même.

0 votes

Bien que je n'utilise pas Skim, j'ai des fichiers PDF modifiés. J'ai trouvé qu'une différence de 2 secondes n'est pas suffisante. Mais tu trouves bientôt ce qui est le mieux par l'expérimentation. Je garde ta solution (sans Skim) dans mes Workflows sauvegardés - merci.

0 votes

@Gilby, Il était tard quand j'ai posté ma réponse initialement et j'ai utilisé + 2 juste parce qu'une valeur devait être ajoutée et j'ai pris note de cela, cependant après une relecture ce matin, j'ai modifié le code pour utiliser les 60 secondes suggérées dans le commentaire à l'auteur de la question. Je l'ai défini comme une variable séparée afin de ne pas avoir à modifier plus en profondeur le code. Merci pour votre commentaire.

0 votes

C'est FANTASTIQUE. J'ai reçu une alerte d'erreur qui pourrait être liée à certains types de fichiers PDF. Par exemple, un PDF en particulier est en lecture seule ou sécurisé d'une autre manière (c'est-à-dire que je peux annoter, mais je ne peux pas l'imprimer). Lorsque j'ai lancé le script spécifiquement sur le dossier contenant ce PDF, j'ai de nouveau reçu l'erreur. Néanmoins, lorsque je vérifie rapidement une vingtaine d'autres PDF (normaux), ils ont tous été enregistrés avec des notes intégrées. Du bon travail. Merci encore!

1voto

ProGrammer Points 2210

Introduction
Basé sur vos questions et votre commentaire de suivi ci-dessous, je pense que la solution peut être aussi simple que ce que je propose. En plus du commentaire bien écrit de @user3439894, je crois que vous avez quelques excellentes options pour accomplir votre tâche.

La configuration

  1. Ouvrez l'emplacement dans Finder et accédez aux options d'affichage en haut. Cela ressemble à ceci: entrez la description de l'image ici

  2. Maintenant, accédez aux options/barre d'arrangement en haut, cliquez dessus et vous devriez voir ce qui suit. Assurez-vous de vérifier à la fois Date de modification et Date de création ainsi que d'autres options que vous souhaitez trier par. entrez la description de l'image ici

  3. Ensuite, triez votre liste par Date de modification, dans mon cas j'ai créé les fichiers les uns après les autres dans un ordre de nommage consécutif, ne vous laissez pas tromper. J'ai modifié le fichier 17.pdf et l'ai enregistré. Comme vous pouvez le voir, il a sauté en tête de liste. Lorsqu'il est affiché dans l'ordre décideur. entrez la description de l'image ici

Mise en œuvre
Comme tous les fichiers sont maintenant regroupés par leur Date de modification, vous pouvez les glisser par paquets individuellement dans votre droplet (en supposant qu'il fonctionne effectivement complètement comme vous le dites).
Cela couvrirait la seconde moitié de votre commentaire de suivi, tandis que @user3439894 vous a essentiellement donné ce que vous recherchez dans la première moitié.
Je serais intéressé à faire le suivi avec vous sur comment les choses se sont passées, quelle que soit l'option que vous choisissez, c'est à vous de décider, ce sont toutes deux des alternatives à l'inspection manuelle des données une par une.

0 votes

Je remercie votre suggestion d'utiliser une méthode visuelle, qui serait plus utile si je n'avais pas à gérer autant de PDF dans plusieurs dossiers. Cependant, Finder me permet seulement de trier selon un seul critère à la fois. Ainsi, lorsque je trie par 'date de modification' et que je fais défiler les fichiers, ils sont toujours mélangés (c'est-à-dire que tous les fichiers modifiés ne sont pas en haut/en bas). Merci.

0voto

wch1zpink Points 6067

Sans doute, la chose la plus simple à faire serait de créer un dossier intelligent dans Finder. Ce dossier intelligent contient tous les fichiers définis par vos critères de recherche. Ensuite, il est très facile de trier les fichiers de la manière que vous souhaitez.

Dans Finder, allez dans le menu Fichier/Nouveau dossier intelligent.

entrer la description de l'image ici

Si vous souhaitez rechercher l'ensemble de votre ordinateur pour les fichiers PDF, sélectionnez "Macintosh HD" dans la barre latérale. Dans le champ de recherche, saisissez simplement… .pdf

entrer la description de l'image ici

Sur le côté droit de cette image, vous verrez un bouton + sous le bouton Enregistrer. En cliquant sur ce bouton, vous pourrez saisir plus de critères de recherche. Il y a plein d'options parmi lesquelles vous pouvez choisir. J'ai choisi "extension de fichier" et ajouté .pdf pour la valeur

entrer la description de l'image ici

Dans Finder, allez dans le menu Affichage/Afficher les options d'affichage

entrer la description de l'image ici

Assurez-vous que "Date de modification" est réglée dans les deux champs disponibles

entrer la description de l'image ici

Cliquez sur le bouton "Enregistrer" sous l'onglet qui dit Nouveau dossier intelligent

entrer la description de l'image ici

Vous aurez maintenant un nouveau dossier intelligent avec tous vos PDF dans la barre latérale de votre Finder.

entrer la description de l'image ici

1 votes

Bien que ce soit une belle démonstration de comment créer une recherche enregistrée utile, je ne pense pas que cela puisse répondre à la question de @william. Il n'y a pas de moyen (autant que je sache) de faire une comparaison de dates dans spotlight.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X