memorandums

日々の生活で問題解決したこと、知ってよかったことなどを自分が思い出すために記録しています。

Mendeleyに登録したPDFをフォルダ単位に一括でエクスポートする機能がないので。。。がんばって何とかする方法を考えてみた

あらゆるケースに対応している。。。とは言い難いですが、とりあえずPDFを一つ一つ選択するよりはよっぽどマシという手順を手探りで作ってみました。

まず、Mendeley Desktopをダウンロードします。Macでしか確認していません。

で、Mendeleyにログインしてローカルに同期します。

このときに、Mendeley Desktopのメニューから[Preferences]-[File Organizer]を選択して、Organize my filesにチェックをいれて、ファイル名はTitleのみにします。YearやAuthorをいれてもいいですがファイル名の長さ上限に引っかかってしまう場合があるのでTitleのみが望ましいと思われます。

で、Syncボタンを押すと、全てのPDFファイルがMacのハードディスク(/Users/アカウント名/Documents/Mendeley Desktop)にダウンロードされます。

ダウンロードされたPDFファイルはフォルダなしでフラットに展開されます←この表現で意味がわかるでしょうか?

Mendeleyでフォルダごとにわけていてもローカルに保存されたPDFはその構造を無視した形で保存されます。残念ですね。。。まぁ、ガンガンMendeleyを使って有料登録してね、ということなんでしょうね。

で、この状態からスタートです。

Mendeley Desktopで保存したいフォルダを選択し、そのフォルダ内の文献をすべて選択した状態で右クリックを押しエクスポートを選択します。で、bibtexファイルをDesktopに保存します。ファイル名はデフォのUntitled.bibとしておきます。ついでに、PDF保存用のtmpフォルダをDesktopに作成しておきます。

ここでターミナルをおもむろに開き、/Users/アカウント名/Documents/Mendeley Desktopに移動します。そこで以下のコマンドを入力します。長ったらしいですが。。。やっているのはbibtexファイルから論文タイトルを切り抜き、その文字列からPDFファイル名を作成して、そのファイルをさきほど作成したDesktop/tmpフォルダ内にコピーするものです。

grep title ~/Desktop/Untitled.bib | grep -v booktitle | sed 's/"//' | awk -F '[{}]' '{print "\"" $3 ".pdf\""}' | sed 's/[/|:|*|?|>|<|\\]//' | sed 's/ / /' | sed 's/\.\./\./' | sed 's/ .pdf/.pdf/' | xargs -I {} cp {} ~/Desktop/tmp

英語の論文で文献情報がしっかり入った文献は問題なくコピーできると思いますが、文献情報がないPDFや日本語の文献はエラーがでます。細かいですが、日本語については上記の$3と$2にすることで動作します。まとめて処理できるようにあれこれがんばってみたのですが諦めました。。。あとTitleがとても長い論文はファイル名にするときにMendeleyが勝手に?短縮します。そのため、上記のコマンドで作り出したファイル名と差異が生じるためcpに失敗します。この場合は手でコピーするしかないです。。。数は多くないと思いますので。。。

あとはフォルダごとにbibtexをエクシポートし&上記のコマンド実行を繰り返せばうまくライブラリ全体のPDFをフォルダ単位に取り出すことができると思います。

なお、一応、上記のコマンドでは安全をみてcpにしています。Mendeleyライブラリから削除しバックアップすることを目的とするのであればmvに書き換えてもいいと思います。ちなみに、Mendeley Desktop上で文献を削除してもPDFファイルは消えません。よくわかりませんが恐らく安全側に振っているのだと思います。綺麗にしたいのであれば、一旦、/Users/アカウント名/Documents/Mendeley Desktop内のPDFを削除して再度Syncボタンを押せばいいと思います。

3時か。。。風呂入って寝よう。