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/
(同じコンセプトですが、含まれるディレクトリについてはかなり選り好みします)。
rsync
には、除外パターンの例が含まれます。
"*" means everything
"dir1" transfers empty directory [dir1]
"dir*" transfers empty directories like: "dir1", "dir2", "dir3", etc...
"file*" transfers files whose names start with [file]
"dir**" transfers every path that starts with [dir] like "dir1/file.txt", "dir2/bar/ffaa.html", etc...
"dir***" same as above
"dir1/*" does nothing
"dir1/**" does nothing
"dir1/***" transfers [dir1] directory and all its contents like "dir1/file.txt", "dir1/fooo.sh", "dir1/fold/baar.py", etc...
最後の注意点は、パスを評価するために最初に使用されるアスタリスクに単純に依存しないことです。好む "**dir"
(パスではなく単一のフォルダまたはファイルに使用しても構いません)、ファイル名には2つ以上のアスタリスクが機能しないことに注意してください。
空のディレクトリを削除するには、上記の推奨される回答に-mを追加します。