ファイルを効率よく同期・バックアップできる 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 を使ったファイル同期では、こうした細かな記述ミスが原因で同期されないことがあるため、注意が必要です。
コメント