1. ホーム
  2. linux

[解決済み] Rsyncのincludeオプションとexcludeオプションを使って、ディレクトリとファイルをパターン別にincludeする。

2022-03-09 14:14:32

質問

を取得するのに問題があります。 rsync の構文が正しいかどうか、そして私のシナリオが実際に rsync . まず、確認したのは rsync は、私のローカルホストと私のリモートホストの間で正常に動作しています。ディレクトリを直接同期させると、正常に動作します。

私のファイルシステムはこんな感じです。

uploads/
  1260000000/
    file_11_00.jpg
    file_11_01.jpg
    file_12_00.jpg
  1270000000/
    file_11_00.jpg
    file_11_01.jpg
    file_12_00.jpg
  1280000000/
    file_11_00.jpg
    file_11_01.jpg
    file_12_00.jpg

私は、サブディレクトリ内の "file_11_" で始まるファイルに対してのみ rsync を実行し、サブディレクトリ内のこれらすべてのファイルを同期するために、1 つの rsync ジョブを実行できるようにしたいのです。

試しているコマンドは以下の通りです。

rsync -nrv --include="**/file_11*.jpg" --exclude="*" /Storage/uploads/ /website/uploads/

この結果 0 ファイルを転送するようにマークしています。他にも様々な組み合わせで --include--exclude ステートメントを使用しても、結果が得られなかったり、includeやexcludeオプションが設定されていないかのようにすべてが取得されました。

どなたか心当たりのある方はいらっしゃいますか?

解決方法は?

問題は --exclude="*" は、(例えば)除外するように言っています。 1260000000/ というディレクトリがあるので rsync はそのディレクトリの中身を調べないので、そのディレクトリにあるファイルが --include .

あなたの望むものに最も近いのは、これだと思います。

rsync -nrv --include="*/" --include="file_11*.jpg" --exclude="*" /Storage/uploads/ /website/uploads/

(これはすべてのディレクトリと file_11*.jpg ただし、他のファイルは含まれない)、または たぶん これを

rsync -nrv --include="/[0-9][0-9][0-9]0000000/" --include="file_11*.jpg" --exclude="*" /Storage/uploads/ /website/uploads/

(同じコンセプトですが、インクルードするディレクトリをより細かく指定します)。