rsyncは、ファイル同期を行うLinuxコマンド。
主→従へ完全にファイルの権限やタイムスタンプをコピーする。
デフォルトでは全てのファイルが対象(再帰的なコピーは-r
オプションが必要)だが、名前にフィルタリングルールを適応することができる。
rsync -rtv --include='[a-zA-Z0-9!-.:-@[-`{-~]' --exclude='[^ ]' src/ dest/
半角スペース入りを対象外にする場合
rsync -rtv --include='[a-zA-Z0-9!-.:-@[-`{-~]' --exclude='*' src/ dest/
-rtvについて
-rtv
は割愛。
--include と --excludeについて
取込対象を指定する --include
や --exclude
は上記のようになんちゃって正規表現が使える。
あとは*でワイルドカードで指定ができる。
適応ルールは下記のとおり。
- 無指定の場合、全ファイルが対象
--include=...
、-exclude=...
の指定順で処理していき、最初にマッチした条件のみが適応。
例:「src/java」と「src/resources」と「src/pom.xml」だけをコピー対象として、他は除外する
rsync --include="java/" --include="resources/" --include="pom.xml" --exclude=* src/ dest/
ひっかけ例1:まず『名前が「contents」であるディレクトリを対象にする』それ以外のものは『デフォルトで対象にする』(除外ルールないので結局全部対象)
rsync --include="contents/" src/ dest/
ひっかけ例2:まず『すべてのパターンを除外する』それ以外のものから『a,b,cいずれかを含むファイルのみを対象とする』(結局全部除外するパターン)
rsync --exclude="*" --include="[abc]" src/ dest/