I think is good that you made it a one-liner with pipes. I do not recall
why I did it with that intermediate file, maybe just lazy. Anyhow, use that
at your wish.
I am glad it was helpful.
Enjoy

On Fri, May 11, 2018 at 10:33 PM, Glenn Hoetker <ghoet...@me.com> wrote:

> Thank you to everyone who shared their ideas and experiences.  Multiple
> working answers, which is great.
>
> ***All involved:  May I please include your answers, crediting you of
> course, in my github repository of useful scripts for BibDesk (
> https://github.com/ghoetker/BibDeskAppleScripts), linked to from the
> wiki? Future users might find having the answers consolidated to be
> useful.***
> I’ve modified Roberto’s answer to suit my particular need.  The following
> shell script consumes a base64-encoded binary plist, which is what is
> represented in the Bdsk-File-N field (e.g.,” YnBsaXN0MDDUAQIDBAUGJ…AAAAAAqc=”)
> and emits the xml-encoded (human-readable) plist to the standard output.
>
> ```
> #!/bin/bash
> # Thanks to Roberto on the Bibdesk-users mailing list, who drew
> # inspiration from https://github.com/foice/BibDesk2Zotero_attachments
>
> # Usage
> #   dealias ABC
> # where ABC is the base64 encoded string included in the Bdsk-File-N field
> # It will emit the corresponding xml-encoded (human readable) plist
> # to the standard output for your further processing pleasure.
>
> echo "$1" | base64 -D | plutil -convert xml1 -o - -- -
> ```
>
> So, it differs from Roberto’s in not creating any files as final output or
> intermediate steps.  For my specific application that’s great, as I can
>
>
>    - grep or sed my .bib file to grab just the Bdsk-File-N fields
>    - pipe that through sed to remove everything but the actual base64
>    string
>    - pipe that through *dealias* to emit the xml-formatted plist
>    - pipe that through a xml-parser to extract the information I want
>
>
> Not having to create intermediate files for all 7000+ publications in my
> database (yes, yes, I know…) will be a convenience and possible speed
> savings. For some other applications, Roberto’s approach would work better.
>
> Thank you again to everyone who offered solutions.  I learned a great deal!
>
> Glenn
>
> For clarity and as a test, if you save the shell script as *dealias* somewhere
> your system can find it and invoked with
>
>                 dealias YnBsaXN0MDDUAQIDBAUGJCVYJHZlcn
> Npb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoKgHCBMUFRYaIVUkbn
> VsbNMJCgsMDxJXTlMua2V5c1pOUy5vYmplY3RzViRjbGFzc6INDoACgAOiEB
> GABIAFgAdccmVsYXRpdmVQYXRoWWFsaWFzRGF0YV8QG0EvQW1lbWl5YS0xOT
> g0LVRvYml0LTAwLnBkZtIXCxgZV05TLmRhdGFPEQF8AAAAAAF8AAIAAAxNYW
> NpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAAAAAAAAQkQAAf////
> 8ZQW1lbWl5YS0xOTg0LVRvYml0LTAwLnBkZgAAAAAAAAAAAAAAAAAAAAAAAA
> AAAAAAAAAAAAAAAAAAAAAAAAAA/////wAAAAAAAAAAAAAAAAABAAMAAAogY3U
> AAAAAAAAAAAAAAAAAAUEAAAIAOi86VXNlcnM6Z2hvZXRrZXI6QmliRGVza1B
> hcGVyczpBOkFtZW1peWEtMTk4NC1Ub2JpdC0wMC5wZGYADgA0ABkAQQBtAGU
> AbQBpAHkAYQAtADEAOQA4ADQALQBUAG8AYgBpAHQALQAwADAALgBwAGQAZgA
> PABoADABNAGEAYwBpAG4AdABvAHMAaAAgAEgARAASADhVc2Vycy9naG9ldGt
> lci9CaWJEZXNrUGFwZXJzL0EvQW1lbWl5YS0xOTg0LVRvYml0LTAwLnBkZgA
> TAAEvAAAVAAIAD///AACABtIbHB0eWiRjbGFzc25hbWVYJG
> NsYXNzZXNdTlNNdXRhYmxlRGF0YaMdHyBWTlNEYXRhWE5TT2JqZWN00hscIi
> NcTlNEaWN0aW9uYXJ5oiIgXxAPTlNLZXllZEFyY2hpdmVy0SYnVHJvb3SAAQ
> AIABEAGgAjAC0AMgA3AEAARgBNAFUAYABnAGoAbABuAHEAcwB1AHcAhACOAK
> wAsQC5AjkCOwJAAksCVAJiAmYCbQJ2AnsCiAKLAp0CoAKlAAAAAAAAAgEAAA
> AAAAAAKAAAAAAAAAAAAAAAAAAAAqc=
>
> it should emit
>
> <?xml version="1.0" encoding="UTF-8"?>
> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "
> http://www.apple.com/DTDs/PropertyList-1.0.dtd";>
> <plist version="1.0">
> <dict>
>                 <key>$archiver</key>
>                 <string>NSKeyedArchiver</string>
>                 <key>$objects</key>
>                 <array>
>                                 <string>$null</string>
>                                 <dict>
>                                                 <key>$class</key>
>                                                 <dict>
>
> <key>CF$UID</key>
>
> <integer>7</integer>
>                                                 </dict>
>                                                 <key>NS.keys</key>
>                                                 <array>
>                                                                 <dict>
>
> <key>CF$UID</key>
>
> <integer>2</integer>
>                                                                 </dict>
>                                                                 <dict>
>
> <key>CF$UID</key>
>
> <integer>3</integer>
>                                                                 </dict>
>                                                 </array>
>                                                 <key>NS.objects</key>
>                                                 <array>
>                                                                 <dict>
>
> <key>CF$UID</key>
>
> <integer>4</integer>
>                                                                 </dict>
>                                                                 <dict>
>
> <key>CF$UID</key>
>
> <integer>5</integer>
>                                                                 </dict>
>                                                 </array>
>                                 </dict>
>                                 <string>relativePath</string>
>                                 <string>aliasData</string>
>                                 <string>A/Amemiya-1984-Tobit-
> 00.pdf</string>
>                                 <dict>
>                                                 <key>$class</key>
>                                                 <dict>
>
> <key>CF$UID</key>
>
> <integer>6</integer>
>                                                 </dict>
>                                                 <key>NS.data</key>
>                                                 <data>
>
> AAAAAAF8AAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAAAA
>                                                 AAAAQkQAAf////
> 8ZQW1lbWl5YS0xOTg0LVRvYml0LTAwLnBkZgAA
>
> AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////
>                                                 /
> wAAAAAAAAAAAAAAAAABAAMAAAogY3UAAAAAAAAAAAAAAAAAAUEA
>
> AAIAOi86VXNlcnM6Z2hvZXRrZXI6QmliRGVza1BhcGVyczpBOkFt
>
> ZW1peWEtMTk4NC1Ub2JpdC0wMC5wZGYADgA0ABkAQQBtAGUAbQBp
>
> AHkAYQAtADEAOQA4ADQALQBUAG8AYgBpAHQALQAwADAALgBwAGQA
>
> ZgAPABoADABNAGEAYwBpAG4AdABvAHMAaAAgAEgARAASADhVc2Vy
>
> cy9naG9ldGtlci9CaWJEZXNrUGFwZXJzL0EvQW1lbWl5YS0xOTg0
>
> LVRvYml0LTAwLnBkZgATAAEvAAAVAAIAD///AAA=
>                                                 </data>
>                                 </dict>
>                                 <dict>
>                                                 <key>$classes</key>
>                                                 <array>
>
> <string>NSMutableData</string>
>
> <string>NSData</string>
>
> <string>NSObject</string>
>                                                 </array>
>                                                 <key>$classname</key>
>
> <string>NSMutableData</string>
>                                 </dict>
>                                 <dict>
>                                                 <key>$classes</key>
>                                                 <array>
>
> <string>NSDictionary</string>
>
> <string>NSObject</string>
>                                                 </array>
>                                                 <key>$classname</key>
>
> <string>NSDictionary</string>
>                                 </dict>
>                 </array>
>                 <key>$top</key>
>                 <dict>
>                                 <key>root</key>
>                                 <dict>
>                                                 <key>CF$UID</key>
>                                                 <integer>1</integer>
>                                 </dict>
>                 </dict>
>                 <key>$version</key>
>                 <integer>100000</integer>
> </dict>
> </plist>
>
>
> *From: *Roberto <foice.n...@gmail.com>
> *Reply-To: *For general discussion about using BibDesk <
> bibdesk-users@lists.sourceforge.net>
> *Date: *Friday, May 11, 2018 at 12:50 AM
> *To: *For general discussion about using BibDesk <bibdesk-users@lists.
> sourceforge.net>
> *Subject: *Re: [Bibdesk-users] Programmatically interpreting Bdsk-File-N
> information
>
> maybe this is useful?
>
> #!/bin/bash
> # thanks to https://github.com/foice/BibDesk2Zotero_attachments
> echo "$1" > path.encoded
> base64 -D -i path.encoded -o path.dec
> cp path.dec "$2".xml
> plutil -convert xml1 "$2".xml
>
> it draws from code here
> https://github.com/foice/BibDesk2Zotero_attachments
>
>
>
> ------------------------------------------------------------
> ------------------
> Check out the vibrant tech community on one of the world's most
> engaging tech sites, Slashdot.org! http://sdm.link/slashdot
> _______________________________________________
> Bibdesk-users mailing list
> Bibdesk-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/bibdesk-users
>
>
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Bibdesk-users mailing list
Bibdesk-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bibdesk-users

Reply via email to