FreeBSD 12.x:特定のフォルダをマイターゲットフォルダに同期する

FreeBSD 12.x:特定のフォルダをマイターゲットフォルダに同期する

上記のように

たとえば、説明するのが最善だと思います。

/mnt/source/source-folder
  -> sfolder1
  -> sfolder2 
  -> sfolder3
  -> sfolder4

「sfolder」には、数十のフォルダとその中に何百ものファイルが含まれています。

「sfolder2とその内容」を/mnt/destination/destination-folderにコピーしたいと思います。

頑張った

rsync -nriv --stats --include "sfolder2" --exclude "*" /mnt/source/source-folder/ /mnt/destination/destination-folder/

rsync -nriv --stats --include "sfolder2*" --exclude "*" /mnt/source/source-folder/ /mnt/destination/destination-folder/

rsync -nriv --stats --include "*sfolder2*" --exclude "*" /mnt/source/source-folder/ /mnt/destination/destination-folder/

すべての場合において、統計レポートは「sfolder2」フォルダのみを送信し、「sfolder2」内の数十のフォルダと数百のファイルは無視されます。

私は何が間違っていましたか?

私の実際の目標は、ソースからターゲットに複数のフォルダ(上記のフォルダ設定、sfolder2、sfolder4など)をコピーすることです。現在テストするときは、フォルダを1つだけ使用してください。

ありがとうございます!

答え1

「すべての場所」を除き、*転送ルートのsfolder2ファイルまたはディレクトリのみを転送するために含めました。sfolder2

代わりに、/*ソースディレクトリに関連するファイルのみを除外できます。つまり/sfolder3、たとえば除外されると/sfolder3親ディレクトリが除外されるため、内部のすべてのファイルも除外されます。

Useを使用すると、/sfolder2/そのディレクトリがソースディレクトリ(/最初に)に相対的であり、ディレクトリ(/最後にある)であることが明らかになります。また、-r-aアーカイブモード)を次に置き換えました-r

rsync -naiv --stats --include='/sfolder2/' --exclude='/*' \
 /mnt/source/source-folder/ /mnt/destination/destination-folder/

sfolder2以下を含みますsfolder4

rsync -naiv --stats --include='/sfolder2/' --include='/sfolder4/' --exclude='/*' \
 /mnt/source/source-folder/ /mnt/destination/destination-folder/

答え2

相対パスを使用すると、すべての--include合併症を回避できます--exclude。ここで--relative()フラグは、ソースパスがターゲットに保持されている-Rことを示します。rsyncソースで/./保持されるパスの開始を表示します。 (これがなければ、フルパスが維持されます。)

rsync --dry-run -aivR --stats /mnt/source/source-folder/./sfolder2/ /mnt/destination/destination-folder

これによりsfolder2内容が にコピーされます/mnt/destination/destination-folder/sfolder2

sfolder2複数のフォルダ(および)をコピーするには、sfolder4複数のソースパスを使用できます。シェルが{x,y}次のようにサポートグループを処理する場合

rsync --dry-run -aivR --stats /mnt/source/source-folder/./sfolder{2,4}/ /mnt/destination/destination-folder

または他の状況

rsync --dry-run -aivR --stats /mnt/source/source-folder/./sfolder2/ /mnt/source/source-folder/./other4/ /mnt/destination/destination-folder

--recursive(しかし(-r)を使用してファイルツリーをコピーする代わりに--archive-a)または追加--times-t)を使用して、同じファイルの将来のコピーを最適化することができますrsync。例では、を使用しました。-a. -rt)

関連情報