パスにスペースを含むディレクトリを rsync で安全に同期する方法(macOS 15.4で検証)

ファイルを効率よく同期・バックアップできる rsync は、Web制作やファイル管理などの現場で広く利用されているコマンドです。ただし、ディレクトリパスにスペースが含まれていると、意図しないエラーが発生することがあります。

この記事では、macOS を使った実例とともに、rsync でスペースを含むパスを正しく扱う方法を紹介します。


動作環境

本記事は以下の環境で動作確認を行いました。

  • OS:macOS 15.4
  • Build:24E248
  • ターミナル:macOS 標準ターミナル
  • rsync バージョン:openrsync(rsync 2.6.9 互換、protocol version 29)

macOS 標準の rsync は比較的古いバージョンが搭載されているため、一部機能には制限がありますが、基本的な同期処理には問題ありません。


パスにスペースがあると失敗する例

実行コマンド(失敗例):

rsync -av /Users/exampleuser/projects/source-dir/ /Users/exampleuser/Work Files/project-data/

実行結果:

rsync(17288): error: /Users/exampleuser/Work: (l)stat: No such file or directory
Transfer starting: 340 files

解説:

このエラーは、/Users/exampleuser/Work Files/... に含まれるスペースが原因で、rsync/Users/exampleuser/Work という存在しないディレクトリを参照しようとしているために発生します。

さらにややこしいのは、エラーが出ていても「Transfer starting: …」というメッセージが出ることがあり、一見処理が進んでいるように見えることです。実際にはファイルの転送は行われていません。


スペースを含むパスの正しい扱い方

方法①:クォートで囲む(推奨)

スペースを含むパスは、全体をダブルクォート(”")またはシングルクォート(')で囲みます

rsync -av "/Users/exampleuser/projects/source-dir/" "/Users/exampleuser/Work Files/project-data/"

方法②:スペースをバックスラッシュでエスケープする

各スペースに \ を付けて「エスケープ」することでも対処できます。

rsync -av /Users/exampleuser/projects/source-dir/ /Users/exampleuser/Work\ Files/project-data/

ただし、バックスラッシュによる方法はパスが長くなると可読性が下がるため、クォートで囲む方法をおすすめします。


rsync の主なオプション

  • -a:アーカイブモード(ディレクトリ構造、パーミッションなどを保持)
  • -v:詳細表示(verbose)
  • --dry-run:実際には同期せず、何が起きるかを確認する(テストに便利)

まとめ

方法特徴推奨度
クォートで囲むわかりやすく確実に動作する
バックスラッシュでエスケープ正確だが読みづらい
  • パスにスペースを含む場合は、クォートで囲むのが最も簡単で確実な方法です。
  • rsync を使ったファイル同期では、こうした細かな記述ミスが原因で同期されないことがあるため、注意が必要です。

コメント

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