Short post today as I am in L.A. for work and insanely busy. I’m actually writing this post from the bar in my hotel and it is last night, after a roughly 15 hour day of work. So please forgive any brevity.
Once a month, export all of my Evernote data to an ENEX file, which sits on an external disk. That file, in turn, gets backup by my cloud backup service, CrashPlan. It may seem kind of silly to back up notes that are already stored in the cloud, but I have what I think is one really good reasons for backing up my data.
Why I backup my Evernote data
Backing up data–even data in the cloud that is generally readily accessible–acts as a kind of insurance policy. I am planning ahead for the unexpected. Being prepared for the unexpected is something that I picked up back in my flying days, when all kinds of little problems might crop up, and being able to decide whether or not they were serious was important.
In truth, what I am preparing for is my inevitable screw up. I know that at some point in time, I am bound to so something unintentionally destructive. Perhaps, after working hard many days, with little sleep, I accidentally drag an important notebook to the trash, and then purge the trash before I realized what happened. Once that happens, and Evernote syncs with the server, the notes are unrecoverable.
That might seem extreme, and perhaps it is. But I’ve worked with technology (and been a professional in the IT field) long enough to know that I am eventually bound to screw up. Having a backup of my notes provides some measure of protection against those screw-up, and that is the main reason that I back up my Evernote data.
How I backup my Evernote data
I work primarily on a Mac, and so I wrote an AppleScript to take advantage of Evernote’s AppleScript interface to automate the process of backing up my Evernote data.
You can find my AppleScript on GitHub.
The script is pretty simple. It selects all notes after January 1, 1990, and exports them to an ENEX file on a specified path. I chose that date because it will backup any notes after that date. If you’ve created notes and dated them prior to 1990, you’ll want to change line 10 of the script to reflect the appropriate date.
You’ll also want to update line 5 with the path on your machine that you want the export file to reside. In my code, I’ve export mine to an external drive that is backed up by my cloud backup service.
When I run the script, it selects all of the notes that meet the criteria and then exports them. I have more than 8,000 notes so this takes a little while. I set the timeout to 30 minutes, which is usually plenty of time for me. When the export is complete, the script then compresses the export file so that it is a little smaller when it is backed up to my cloud backup service.
Automating the process
As it stands, the script has to be run manually. To automate the process, I use an app called Lingon, which makes it easy to schedule jobs on the Mac. I have my script run once a month (usually on the first day). Once the job is setup in Lingon, the script runs automatically.
Restoring from the export
“In the unlikely event of a water landing,” as they say, optimistically before your flight… I’ve done some testing of restoring ENEX files into Evernote, and the process works very well. All of the notes are restored, including the tags. But the notes are all restored to a single “restore” notebook. This actually makes sense, because you might be restoring a small set of notes and don’t want to overwrite existing notes. I was able to import the ENEX file, see all of my notes, and then manually move them into the appropriate notebooks. A little cumbersome, yes, but if I’ve made a dumb mistake that requires me to restore notes from backups, I’m happy to do a little extra work.
What about Windows?
As I said, I primarily work on a Mac. It is possible to script exports on Windows, but it is from the command line using command line options of Evernote itself. Since I don’t use Windows as my primary Evernote repository, I haven’t investigated this. But I’m pretty sure it is possible.
ETA: See the first comment for a good example of how to automate your backups in Windows.
ETA 8/16: For folks who have been reporting an error with the script, see Scott’s comment below. Apparently, the error only occurs in version of Evernote downloaded from the App Store. If you download Evernote from Evernote.com, you won’t see any error. My guess is that the error from the App store version has something to do with sandboxing.
If you have a suggestion for a future Going Paperless post, let know me. Send it to me at feedback [at] jamietoddrubin.com. As always, this post and all of my Going Paperless posts is also available on Pinterest.
Last week’s post: How I Use Playbooks with Evernote.
Enjoy these posts? – Tell a friend
Recommending readers is one of the highest compliments you can pay to a writer. If you enjoy what you read here, or you find the posts useful, tell a friend! Find me online here:
Twitter | Facebook | Google+ | Reddit | Blog | RSS
Or use one of the share buttons below. Thanks for reading!
For Windows, I use a batch file (which in my case is simply a .cmd shell script) with the following command:
“c:\Program Files (x86)\Evernote\Evernote\ENScript.exe” exportNotes /q any:* /f X:\Evernote\%date:~-4,4%%date:~-7,2%%date:~-10,2%_bkp_Evernote.enex
Which will generate a file named something like 20140808_bkp_Evernote.enex in my X:\evernote folder (which for me is connected to a NAS) containing all of my notes. This could be filtered down as you point out in the blog post.
The command breakdown is:
– We use the ENScript.exe utility, suplying the ‘exportNotes’ command.
exportNotes takes two options: /q to retrieve the notes to export, and /f
– for the query, we just select all the notes doing a search for any:* — but could also be filtered using the search grammar adding notebook:something and tag:something filters.
– To generate the filename, we use the %DATE% environment variable name, but printing it ‘as is’ would give us a string like 04/05/2014, which has problematic slashes. We also want to reverse the format. This is done with a slight modification on the one-liner answer by Jess Stone on this post http://superuser.com/questions/47885/windows-command-line-create-a-file-with-the-current-date-in-its-name leading to %date:~-4,4%%date:~-7,2%%date:~-10,2%
– I’m also appending _bkp_Evernote.enex to the exported file to match my file naming convention.
Cheers,
Jose
Jose, thanks so much for posting this. I’m sure this will be really helpful to many Windows Evernote users.
I’m a certifiable backup freak so I appreciate your instinct, but I wonder if this adds enough marginal security to justify the effort, particularly if your organization has to be restored (although I can see ways around that).
I figure that Evernote’s own Shard 1 is my first backup; Time Machine is my second; CrashPlan is my third. Is that enough, or not?
It’s fine for full disaster recovery, but I’m worried about non-disasters–accidents of my own doing, where I don’t want to restore *all* of my notes, just some of them. This gives me a mechanism to pick and choose what I want to restore without overwriting notes that might have been created or modified in the meantime.
Thank you for your very sharp-minded ideas! The biggest (bad) surprise for me is the apparent impossibility to recover any Evernote notebook you would have deleted!
Are you sure you can’t fix it, at least for a premium user as you?
Michel, I think once you’ve deleted notes, purged the trash and synced with Evernote’s servers, you are pretty much out of luck.
Hi Jamie
Thanks. I’ve never knowingly run an Applescript in my life never mind edited one. However your script is currently running backing up my, meagre, 2265 notes. Next I’ll try Automating it with Lingon – or could I use Automator for that?
I really enjoy the blog, keep up the great work!
best wishes
Nigel
This article talks about how to backup your Evernote files in Windows:
http://jasonfrasca.com/deconstructing-everyday-blog/evernote-how-to-backup-notes-import/
Hope this helps.
Jim
Great info. Love to hear more about your use of Crashplan and any hints you may have on speeding up the back up process (initial). Thanks!
Hi Jamie,
Thanks for the idea, I’ve created a Windows script that does the same thing with a couple of extra items on GitHub. It also performs a sync before the backup, then creates a note saying the backup was successful.
Alton(ius) Blom
I like the reasoning for the backup. Eventually everyone makes a mistake. I’ve gotten quite heavy into evernote usage, and I think it might be wise to start doing backups.
I’m wondering … I make a backup of my HD to Time Machine and Crashplan. Isn’t that enough? Isn’t Time Machine (and Crashplan) taking a backup of the Evernote files on my HD? Or am I wrong here?
Fl6anders, I think you are good for disaster recovery. Same for me with Crashplan. But I like the export because it exports the notes in an open (XML) format that allows me to recover from non-disasters. That is, rather than my drive blowing up, I accidentally trash all notes tagged “receipts” or something like that. If I restored from the Evernote data store on my Mac, the restore would potentially overwrite other notes I’ve created outside of the notes I deleted. By restoring from the XML file (ENEX) I can pick and choose which notes I want to restore, and not disturb any notes I might have created between my last backup and my mistake.
On the Mac you can use
cron
andosascript
(the command line AppleScript runner) to perform these backups automatically instead of manually. Open a terminal and entercrontab -e
(or, if you don’t like the default vi editor, you can useenv EDITOR=nano crontab -e
to usenano
(much more user-friendly) as a crontab editor.Following is an example of how it works—this is the crontab I use to run some AppleScripts to pull information into Evernote as well as apply some tagging (use
man crontab
to learn how it works):01 00 * * * osascript /Users/steven/Library/Mobile\ Documents/com\~apple\~ScriptEditor2/Documents/All\ Received\ SMSs\ from\ Yesterday.scpt
01 00 * * * osascript /Users/steven/Library/Mobile\ Documents/com\~apple\~ScriptEditor2/Documents/Yesterday\'s\ Financial\ Transactions.scpt
01 00 * * * osascript /Users/steven/Library/Mobile\ Documents/com\~apple\~ScriptEditor2/Documents/Notes\ created\ yesterday.scpt
02 00 * * * osascript /Users/steven/Library/Mobile\ Documents/com\~apple\~ScriptEditor2/Documents/Notes\ modified\ yesterday.scpt
00 0,6,12,18 * * * osascript /Users/steven/Library/Mobile\ Documents/com\~apple\~ScriptEditor2/Documents/Add\ Annual\ Tags.scpt
I use Lingon because it’s a nice simple, UI wrapper fro cron and helps make sure I don’t make any silly typos when configuring the job.
This is a great post, but I’m running into an issue. At the “export matches to f” line I’m getting:
error "Evernote got an error: The operation couldn’t be completed. Operation not permitted" number 1
I tried exporting to different locations, all of which are set with 777 permissions. No dice. Any idea why this would be happening?
BTW, same result on OS X 10.7.5 and 10.9.4 (two different Macs).
No idea. Haven’t seen it happen on my end. I’m assuming that what you have set to f is a valid path (no typos, etc.)?
It also could be that the account the AppleScript is running as doesn’t own the file. You could try adding the phrase “with administrator privileges” to the end of the line in question, e.g.:
export matches to f with administrator privileges
This will force the script to prompt you for a login/password, but might also confirm that you need to change ownership of the file.
I got the same ‘Operation not permitted exception’. I tried to append ‘with administrator privileges’ but then I get the following error ‘Expected end of line, etc. but found idnetifier’
I encountered the same problem. I think that the script doesn’t create the .enex file if it doesn’t exist. I created a file with the correct name by exporting a single note directly from Evernote, and then the script ran to completion.
Try as I might, I can’t reproduce the error. I installed the script on my new Macbook Air just now and ran it, exporting the note my Documents folder, and it runs without an error. I can’t think of what my cause it–except maybe file ownership?
I just ran it on a new machine. The ENEX file didn’t exist, but the script created it without an error. Both machines I’ve tried this on are running 10.9.4.
I’m getting the same error. I’m trying to write to my user directory, so I definitely have permissions.
Yeah, I’m baffled. As I said above, I just copied the script to a new machine and ran it there without any error. This is what it looks like for me:
If anyone has ideas as to why the error might be cropping up, I’m all ears.
I had a similar issue too. After doing some digging, I realized that it was because I was using the App Store version of Evernote. Once I uninstalled that version and downloaded/installed the Evernote.com version, it worked great!
BTW – thanks for the script, JTR!
Great catch, Scott! It makes sense, too since I am using the version downloaded from Evernote, not the one from the App store.
What a great idea! I’m a huge Evernote (Premium) user and this is quite helpful. I wasn’t really satisfied with having all my notes in one export file though and the hack with the 1990 date bothered me, so I rewrote the script. This version asks Evernote of a list of its notebooks, then exports every note in each notebook to its own file. Hope this is helpful!
Check out CloudHQ https://www.cloudhq.net I’ve been using it for about 6 months to back up Evernote, its terrific. Backs up to Google Drive or other services. Can back up as ENEX, pdf, whatever.
There is an app/website that is growing in popularity that automates a whole host of tasks, and you can create your own “recipe” too.
ifttt.com
It stands for “If This Then That.” It seems to be free right now, so I don’t know if they will charge in the future.
I am fairly new to it, but I’d assume you should be able to archive Evernote to something like DropBox, or Google Drive.
great work. would you recommend Lingon 3 or Lingon X?
I’ve only used Lingon 3. I saw that Lingon X was available, but for what I need, Lingon 3 does the job just fine.
I like Brent Neal’s modification to export entire notebooks vs. one huge backup. However, I am a fan of keeping multiple backups, so I tweaked the code to append the current date to the name of the backup files plus create the target directory (also w/ the backup date) if it doesn’t already exist
— PURPOSE: Export all notes in Evernote to an ENEX file so that
— the notes can be backed up to an external drive or to the cloud
set curDate to do shell script “date +’%Y%m%d'”
— Change the path below to the location you want the notes to be exported
set exportPath to “/Volumes/Data/bkp/Evernotxe-” & curDate & “/”
do shell script “if [ ! -e ” & exportPath & ” ]; then mkdir ” & exportPath & “; fi;”
do shell script “mkdir ” & exportPath
with timeout of (30 * 60) seconds
tell application “Evernote”
repeat with nb in every notebook of application “Evernote”
set theName to the name of nb
set matches to find notes “notebook:” & “\”” & theName & “\””
set f to exportPath & theName & “-” & curDate & “.enex”
export matches to f
if (count of matches) > 0 then
set p to POSIX path of f
do shell script “/usr/bin/gzip -f ” & quoted form of p
end if
end repeat
end tell
end timeout
I think there are two other ways you could automate this with Automator, and it wouldn’t require purchasing another program.
1. Create an application with the script, and add it to your login items. Every time you start your computer, it would run. The downside is that it will use resources at your login, and if you login/restart often, you’d end up with a lot of backups. But if you only login/restart every two to four weeks, an application would work.
2. Setup a Calendar alarm via Automator. You could then specify a repeat date (1st of month) and the script would automatically run.
Although I haven’t specifically tried it with this script, I have a couple of Automator workflows that do #1 and #2 for various tasks.
Another way to handle Evernote backup is to use Revert. Revert does a daily backup of your Evernote notes giving you version control and the ability to restore notes or notebooks. https://revert.io/apps/backup-for-evernote