[Obsidian]タイトルに絵文字を使うならDropboxは諦めろ

「フォルダ名やファイル名に絵文字を使いたい」
Obsidianユーザーにもこんな方は多いと思います。ファイルの内容がビジュアルで推測できる絵文字は見た目も楽しく、とても便利です。

ただしあなたがVaultの同期やバックアップにDropboxを使っているなら、「絵文字を使うのは止めたほうがいい」と言わざるを得ません。タスクバーのDropboxアイコンを確認してみてください。

アイコンに赤い印が付いていたら要注意。絵文字が原因で同期エラーが発生している可能性があります。
今回はDropboxの文字制限と、その回避方法について。

Dropboxの文字制限

冒頭のエラーをたどると、次のページに行き着きます。

Dropbox が同期しないなどの問題を修正する方法
Dropbox が同期されない問題(ファイルやフォルダの同期が止まったり、同期に予想以上に時間がかかったりするなどの問題)を診断して解決する方法をご覧ください。

このページには絵文字以外にも様々な同期エラーに関する情報が掲載されていますが、ここでは特に「フォルダ名やファイル名に使用できない文字」を抜粋しておきます。

非対応文字列読み方
/ , \スラッシュ、バックスラッシュ
> , <大なり、小なり記号 (不等号)
:コロン
|パイプ (縦線)
"ダブルクオート
?クエスチョンマーク
*アスタリスク
.拡張子以外のドット (ピリオド)

MacOSではこのうちスラッシュとバックスラッシュ以外は使用可能ですが、Windowsマシンとファイルのやり取りがある場合は注意してください。

これらの文字に加え、変換時に<機種依存文字>と表示されるものは使用しない方がいいでしょう。絵文字は全てこれに当たります。

対処法

この問題に関しては「Dropboxの仕様です」としか言えないので、基本的にはどうしようもありません。回避するためには、

  • Dropboxを諦める
  • 絵文字を諦める

のどちらかを選択する必要があります。

Dropboxに特別なこだわりがなければGoogleドライブに移行するのが簡単ですが、そうもいかない場合は全ての絵文字を削除する必要があります。

問題は絵文字を含むフォルダやファイルが大量にある場合。
10や20ならまだしも、100や200となってくるとなかなか手動では厳しいものがあります。

そこで今回はプログラミングの力を借りて、フォルダ名やファイル名から絵文字を削除する方法をご紹介しましょう。

絵文字をPythonでリネームする

Pythonとemojiライブラリのインストール

この記事ではPythonを使います。最初にPythonをインストール。

Welcome to Python.org
The official home of the Python Programming Language

インストール方法は別記事でも解説しているので、不安な方はこちらで確認してください。

[Python入門]超簡単インストール (Windows10)
今回はPythonの最も簡単な始め方として、Pythonのダウンロード、インスト...

次に「emoji」というライブラリをインストールします。WindowsならPowerShell、Macならターミナルを開いて、次のコマンドを打ち込みましょう。

pip install emoji --upgrade

Vaultのパスを取得する

次にお使いのVaultのフルパスを取得して、どこかにメモしておいてください。ファイル名が変更されてしまうので、不安な方はフォルダ全体をどこかにコピーしておくと安全。

今回はデモとしてWindowsのCドライブ直下に「test」というフォルダを置き、そこに絵文字を含んだフォルダ、ファイルを配置します。

ちなみにObsidianで見るとこんな感じ。フォルダの中にもいくつかファイルを入れています。

Pythonのソースコードをコピー

準備できたら下のコードをコピーして、テキストファイルに貼り付けましょう。

import emoji
import glob
import os

# 絵文字リスト
emojis = emoji.UNICODE_EMOJI

# 指定フォルダから、全てのアイテムをリストアップ
path = 'c:/test/'
allItems = glob.glob(path+'**', recursive=True)
allItems.sort()

# 絵文字が含まれていれば、それを削除する関数
def renameItems(items):
    for i in items:
        renamed = ''
        for j in i:
            if j not in emojis:
                renamed = renamed + j
        try:
            os.rename(i, renamed)
        except FileNotFoundError:
            return 1
    return 0

# 関数の実行
x = renameItems(allItems)
if x == 1:
    print('もう一度実行してください')
else:
    print('完了')

貼付け後、ファイルを開いて9行目のpath = 〇〇の部分をご自身のVaultフォルダのフルパスに変更してください。変更できれば適当に名前を付けて、ファイルの拡張子を「.txt」から「.py」に変更して保存します。

pyファイルをコマンドラインで実行する

このファイルをコマンドラインで実行します。PowerShellやターミナルを開き、cdコマンドでpyファイルのディレクトリに移動。Windowsのデスクトップの場合、cd desktopと入力すればOKです。

この位置でpython ファイル名.pyと入力すれば、このファイルを実行できます。一度試してみましょう。

実行後に「もう一度実行してください」と表示された場合、同じコマンドを入力します。を押せば先ほど入力したコマンドが現れるので、Enterで実行です。

ディレクトリの深さやフォルダの数によって回数は変化しますが、何度か実行すると最終的に「完了」と表示されます。フォルダを確認してみましょう。

フォルダやファイルから絵文字のみが取り除かれました。これでDropboxでも同期可能な状態になります。

名前が被る場合の代替案

上のコードは単純に「フォルダ名やファイル名から絵文字を削除する」というスクリプトですが、この場合注意しなければならないのは、名前が他のファイルと被ってしまうこと。

名前被りを予防するには、例えば絵文字をアンダースコア_などに変換してしまうのも1つの手でしょう。例えばこんな感じ。

import emoji
import glob
import os

# 絵文字リスト
emojis = emoji.UNICODE_EMOJI

# 対象フォルダを指定して、全てのアイテムをリストアップ
path = 'c:/test/'
allItems = glob.glob(path+'**', recursive=True)
allItems.sort()

# 絵文字が含まれていれば、それを削除する
def renameItems(items):
    for i in items:
        renamed = ''
        for j in i:
            if j in emojis:
                renamed = renamed + '_'
            else:
                renamed = renamed + j
        try:
            os.rename(i, renamed)
        except FileNotFoundError:
            return 1
    return 0

# 関数の実行
x = renameItems(allItems)
if x == 1:
    print('もう一度実行してください')
else:
    print('完了')

このスクリプトを同じフォルダに対して実行すると絵文字は削除され、代わりにアンダースコアが入力されます。

ご自身の環境に合わせ、柔軟に変更できるのもスクリプトを使うメリットの1つです。

タイトルとURLをコピーしました