Por el info en el OP y comentarios, esto va a hacer como usted lo pidió.
En Automator:
Lo que el Flujo de trabajo y el ejemplo de AppleScript código :
- Encuentra todos los PDF de los archivos en el destino de la carpeta, incluyendo todas las subcarpetas.
- Esto se hace con el Encontrar Buscador de Elementos de acción y su resultado se pasa a la
Ejecutar AppleScript acción.
- Crea una lista de todos los PDF de los archivos que han sido modificados después de la
creation date
, por el valor de la offsetInSeconds
variable.
- Esto se hace en la primera
repeat
de bucle. Archivos que cumplan los criterios son almacenados en modifiedFilesList
a ser utilizado en la próxima repeat
de bucle.
- Crea una lista de todos los archivos que tengan las anotaciones hechas en la Descremada.
- Esto se hace usando
xattr
para obtener los atributos extendidos de los archivos de destino. Si un archivo tiene el objetivo de los atributos extendidos de un indicador se establece en true
y si no, establecer a false
. Los archivos marcados como true
ir en annotatedSkimFilesList
a ser utilizado en la próxima repeat
de bucle.
- Incrusta en lugar de las anotaciones hechas en los archivos de leche Descremada.
- El uso de la
skimpdf
utilidad dentro Descremada en los archivos en annotatedSkimFilesList
, anotaciones están incrustados en el lugar. Por lo tanto no hay necesidad de exportar a un archivo en segundo lugar, a continuación, elimine el original y reemplazarlo.
NOTA: Mientras que yo he probado este y funciona sin problema, para mí, sin embargo no se ejecute hasta que estés seguro de que usted tiene una copia de seguridad adecuada! También debe probar el flujo de trabajo en un pequeño muestreo de los archivos copiados se coloca fuera de la búsqueda real de la carpeta el flujo de trabajo se ejecuta después de que se acabe la prueba.
Ejemplo de AppleScript código:
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
La comprensión de la do shell script
comando en el segundo repeat
loop:
Cuando un PDF es anotado en Descremada y salvos, atributos extendidos se establecen en el archivo, por ejemplo:
$ xattr Filename.pdf
com.apple.FinderInfo
net_sourceforge_skim-app_notes
net_sourceforge_skim-app_rtf_notes
net_sourceforge_skim-app_text_notes
$
La salida se canaliza |
para:
[ $(grep -c \".*_notes$\") -ge 1 ] && printf 'true' || printf 'false'
Que las pruebas de la salida de grep
contar las ocurrencias del patrón y si grep
encuentra una o más ocurrencias del patrón, entonces el valor de la withNotes
variable se establece en true
, mientras que se establezca en false
lo contrario.
Tenga en cuenta que Descremada tiene un built-en la utilidad de línea de comandos, por ejemplo /Applications/Skim.app/Contents/SharedSupport/skimnotes
que puede ser utilizado para probar si el PDF tiene las anotaciones hechas en Descremada, sin embargo, debido a su salida de esta utilidad es mejor utilizar en un script de shell ejecutar en la Terminal , a continuación, un do shell script
comando, y por qué usé xattr
y grep
lugar.
Nota: El ejemplo de AppleScript en el código de arriba es solo eso, y no incluye cualquier error de manipulación como puede ser apropiado/necesitaba/quería, la responsabilidad recae sobre el usuario para agregar cualquier error de manipulación para cualquier código de ejemplo presentado y / o el código escrito por el mismo.