はじめに
Mac で OneDrive を使用していると、ファイル名やフォルダ名の禁止文字のために同期エラーとなる問題が度々起きます。
私はWebサイトの内容をPDFに保存する際に「|」がよくエラーとなります。これがかなりうっとうしくて解決方法を探していましたが、ようやく解決方法が見つかりました。
Mac 標準アプリの Automator を使用すれば、ファイル保存時にファイル名の禁止文字を自動変換することができます。
この記事では、その方法をご紹介します。
なお、OneDrive のファイル名やフォルダ名の禁止文字は以下になります。
" * : < > ? / \ |
OneDrive で無効な文字を含むファイルの名前を変更できる
また、以下のようなファイル名やフォルダ名も禁止されます。こちらは自動変換がかかります。
名前の先頭または終わりがスペース
ピリオドで終わる名前
サポートされていない Unicode コード ポイント を含 む名前
代理人ペア の問題を 含む名前
Automator を使用したファイル保存時のファイル名自動変換方法
Automator を使用したファイル保存時のファイル名自動変換には制約があり、指定したフォルダ直下のファイルしか変換対象になりません。具体的には、サブフォルダ内のファイルは変換対象にならないということです。
サブフォルダ内のファイル名を変換したい場合は、自動変換ではありませんが、後続の「Automator を使用した右クリックからのファイル名変換方法」をご参照ください。
Finder を起動して「アプリケーション」内の「Automator」を起動します。Spotlight検索から「Automator」を検索して起動することもできます。
「フォルダアクション」を選択し「選択」をクリックします。
画面右上のドロップダウンリストからファイル名を自動変換したいフォルダを指定します。ここでは、OneDrive 直下に保存されたファイルを変換対象にしたいため「OneDrive」を指定しました。
画面中央の「Finder項目の名前を変更」を画面右側にドラッグ&ドロップします。
以下の画面が表示されたら「追加」をクリックします。
「Finder項目をコピー」は不要なので、右上の「x」をクリックして削除します。
「Finder項目の名前を変更」で以下のように指定します。
- テキストを置き換える
- 検索文字列: |
- 置換文字列: (入力なし)
禁止文字ではないですが、半角スペースも「_」に変換するようにします。
再度、画面中央の「Finder項目の名前を変更」を画面右側にドラッグ&ドロップします。
「Finder項目をコピー」を削除し、「Finder項目の名前を変更」で以下のように指定します。
- テキストを置き換える
- 検索文字列: (半角スペース1文字)
- 置換文字列: _
メニューの、ファイル > 保存... からフォルダアクション名を「OneDriveファイル名自動変換」として保存します。
これで設定が完了しました。
ターミナルを使用して動作確認をしてみます。
# Automator で指定したフォルダに移動 $ cd ~/Desktop/OneDrive # 変換文字列を含めたファイルを作成 $ touch "test test|test.txt" # 作成したファイルのファイル名が自動変換されるか確認 $ ls test* test_testtest.txt
無事に自動変換できましたね。
設定を削除するには、Finder のメニューで、移動 > フォルダへ移動 から「~/Library/Workflows/Applications/Folder\ Actions」へ移動して、対象ファイルを削除します。
Automator を使用した右クリックからのファイル名変換方法
Automator の「フォルダアクション」ではサブフォルダに作成されたファイルのファイル名は変換対象にならないので、ここではファイル名を右クリックして表示される「クイックアクション」からファイル名を変換する方法をご紹介します。
Finder を起動して「アプリケーション」内の「Automator」を起動します。Spotlight検索から「Automator」を検索して起動することもできます。
「クイックアクション」を選択し「選択」をクリックします。
以下のように設定します。
- ワークフローが受け取る現在の項目: ファイルまたはフォルダ
- 検索対象: Finder
画面中央の「Finder項目の名前を変更」を画面右側にドラッグ&ドロップします。
「Finder項目をコピー」は不要なので、右上の「x」をクリックして削除します。
「Finder項目の名前を変更」で以下のように指定します。
- テキストを置き換える
- 検索文字列: |
- 置換文字列: (入力なし)
禁止文字ではないですが、半角スペースも「_」に変換するようにします。
再度、画面中央の「Finder項目の名前を変更」を画面右側にドラッグ&ドロップします。
「Finder項目をコピー」を削除し、「Finder項目の名前を変更」で以下のように指定します。
- テキストを置き換える
- 検索文字列: (半角スペース1文字)
- 置換文字列: _
メニューの、ファイル > 保存... からクイックアクション名を「OneDriveファイル名変換」として保存します。
動作確認をします。
更新前のファイルの状態は以下のようになります。
ファイル名を変換するには、対象のファイルを右クリックして「クイックアクション」から先ほど作成した「OneDriveファイル名変換」をクリックします。
無事にファイル名が変換され同期エラーが解消していることが確認できました。
設定を削除するには、Finder のメニューで、移動 > フォルダへ移動 から「~/Library/Services」へ移動して、対象ファイルを削除します。
おわりに
Mac でファイル保存時にファイル名を自動変換する方法ですが、本当ならサブフォルダまで含めて実行できればよかったのですが、そういった方法は今のところなさそうです。
とはいえ、この記事の内容で現実的には問題ないので、うまく活用していただければと覆います。