Come trovare tutti i file PDF modificati

3

Ho una cartella di oltre 6000 file PDF (capitoli, articoli, ecc.). Sto cercando di estirpare / ordinare quelli che ho appena scaricato ma mai annotati. C'è un modo per fare questo? Quei PDF che non ho mai annotato di solito hanno le stesse date "create" e "modificate", quindi stavo pensando che quei criteri potevano essere usati (cioè, cercare i file la cui data di modifica è successiva a / non uguale alla data di creazione ), ma non ho idea di come farlo.

In altre parole, devo essere in grado di trovare qualsiasi PDF sul mio computer che è stato modificato.

Grazie per l'aiuto!

    
posta william 09.01.2018 - 20:28
fonte

3 risposte

3

Per informazioni nell'OP e nei commenti, ciò verrà eseguito come richiesto.

In Automator :

  • Crea un nuovo Flusso di lavoro .
  • Aggiungi un Trova elementi del Finder azione .
    • Con le impostazioni, ad es. Cerca ( Documenti )
    • ( Tutti ) di quanto segue sono veri
    • ( Tipo ) ( è ) ( PDF )
  • Aggiungi un Esegui AppleScript azione .

    • Sostituisci il codice predefinito con il seguente esempio codice AppleScript più avanti:

    • Nota: se Skim non si trova nella cartella / Applicazioni , quindi modifica il valore della skimpdfPathFilename variabile di conseguenza. Non dovrebbe essere necessario modificare qualcos'altro a meno che non si desideri impostare il valore della offsetInSeconds variabile , ad es. set offsetInSeconds to 60 , a un diverso valore . Questa variabile viene utilizzata per aiutare a trovare i file che sono stati realmente modificati da quando sono stati creati. Il differenziale di granularità tra creation date e modification date quando un file viene creato per la prima volta può essere compreso tra 0 secondi e un valore più alto , che non è un valore coerente a seconda come è stato creato il file. Apporta le regolazioni come ritieni adatto al tuo caso d'uso.

Che cos'è il flusso di lavoro e esempio codice AppleScript :

  • trova tutti i file PDF nella cartella target , comprese tutte le sottocartelle.
    • Questo viene fatto con Trova elementi Finder azione e il suo output viene passato all'azione Esegui AppleScript .
  • Crea un elenco di tutti i file PDF che sono stati modificati dopo creation date , in base al valore della variabile offsetInSeconds .
    • Questo è fatto nel primo repeat loop . I file che soddisfano i criteri sono memorizzati in modifiedFilesList per essere utilizzati nel prossimo repeat loop .
  • Crea un elenco di tutti i file con annotazioni fatte in Skim .
    • Questo viene fatto usando xattr per ottenere gli attributi estesi dei file di destinazione. Se un file ha gli attributi estesi di destinazione un flag è impostato su true e in caso contrario, imposta su false . I file contrassegnati come true vanno in annotatedSkimFilesList da utilizzare nel prossimo repeat loop .
  • Incorpora le annotazioni apportate ai file in Skim .
    • Utilizzando l'utilità skimpdf in Skim sui file in annotatedSkimFilesList , le annotazioni sono incorporate. Pertanto non è necessario esportare in un secondo file, quindi eliminare l'originale e sostituirlo.

NOTA: Anche se ho provato questo e funziona senza problemi per me, tuttavia non lo eseguo finché non sei sicuro di avere un backup corretto! Dovresti anche testare il flusso di lavoro su un piccolo campionamento di file copiati al di fuori della cartella di ricerca effettiva su cui verrà eseguito il flusso di lavoro al termine del test.

Esempio codice AppleScript :

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

Comprensione del comando do shell script nel secondo repeat loop :

Quando un PDF è annotato in Skim e salvato, attributi estesi sono impostati sul file, ad es. :

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

L'output viene reindirizzato | a:

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

Che verifica l' output di grep contando le occorrenze del modello e se grep trova una o più occorrenze del modello , quindi il valore della withNotes variabile è impostato su true , mentre è impostato su false altrimenti.

Tieni presente che Skim dispone di un'utilità della riga di comando incorporata, ad es. /Applications/Skim.app/Contents/SharedSupport/skimnotes che può essere utilizzato per verificare se un PDF ha annotazioni fatte in Skim , tuttavia a causa del suo output questa utility è meglio utilizzata in uno script di shell eseguito in Terminale quindi in do shell script comando e perché ho usato xattr e% invecegrep.

Nota: l' esempio AppleScript codice sopra è proprio questo, e non include alcun gestione degli errori come appropriato / necessario / voluto, l'onere dell'utente è di aggiungere qualsiasi gestione degli errori appropriata per ogni codice presentato e > codice scritto da se stesso.

    
risposta data 10.01.2018 - 07:50
fonte
1

Introduzione
Sulla base delle tue domande e del tuo commento di follow-up, ritengo che la soluzione possa essere semplice come quella che sto proponendo. Oltre al commento ben scritto di @ user3439894, ti credo un paio di grandi scelte per portare a termine il tuo compito.

Il programma di installazione

  1. Apri la posizione in Finder e vai alle opzioni di visualizzazione nella parte superiore. Assomiglia a questo:

  2. Oravaiallabarradelleopzionidiarrangiamentoinalto,faiclicsudiessiedovrestivederequantosegue.AssicuratidicontrollaresiaDateModifiedcheDateCreatedinsiemeallealtreopzionichedesideriordinare.

  3. Quindi, ordina il tuo elenco per Date Modified , nel mio caso ho creato i file uno dopo l'altro in ordine di denominazione consecutivo, non lasciarti ingannare. Ho modificato il file 17.pdf e l'ho salvato. Come puoi vedere, è balzato in cima alla lista. Se visto nell'ordine decisivo.

Implementazione
Dato che ora tutti i file sono raggruppati in base al loro Date Modified , puoi trascinarli in blocchi di singolarmente nel tuo droplet (supponendo che funzioni effettivamente come dici tu).
Ciò coprirà la seconda parte del tuo commento di follow-up, mentre @ user3439894 ti ha dato essenzialmente ciò che stai cercando nel primo semestre.
Sarei interessato a seguirti su come sono andate le cose, qualunque sia l'opzione che scegli tu, sono entrambe alternative alla selezione manuale dei dati uno per uno.

    
risposta data 09.01.2018 - 22:30
fonte
0

Probabilmente la cosa più semplice da fare sarebbe creare una cartella intelligente in Finder. Questa cartella intelligente contiene tutti i file definiti dai criteri di ricerca. Da lì, è molto semplice ordinare i file in qualsiasi modo.

Nel Finder, vai alla voce di menu File / New Smart Folder.

Sevuoicercarel'interocomputerperifilePDF,seleziona"Macintosh HD" nella barra laterale. Nel campo di ricerca, inserisci semplicemente ... .pdf

Sullatodestrodiquell'immaginevedraiunpulsante+sottoilpulsanteSalva.Facendoclicsuquelpulsantepotraiinserirepiùcriteridiricerca.Cisonotantissimeopzionichepuoiscegliere.Hoscelto"estensione file" e ho aggiunto .pdf per il valore

NelFinder,vaiallavocedimenuVisualizza/Mostraopzionidivisualizzazione

Assicuratiche"Data modifica" sia impostato in entrambi i campi disponibili

Premiilpulsante"Salva" sotto la scheda che dice la nuova Smart Folder

OraavraiunanuovasmartfoldercontuttiituoiPDFnellabarralateraledelFinder.

    
risposta data 10.01.2018 - 06:56
fonte

Leggi altre domande sui tag