上記のように
たとえば、説明するのが最善だと思います。
/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
)