Per informazioni nell'OP e nei commenti, ciò verrà eseguito come richiesto.
In Automator :
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.