rsyncからフォルダーを除外する方法


60

NASドライブのホームフォルダーをバックアップしようとしています。私はこれを与えています:

rsync -Paz --exclude-from 'rsync-exclude.txt' /home/chris/ admin@192.168.1.65:LinuxHome

rsync-exclude.txtこのコンテンツはどこにありますか:

/home/chris/Downloads/*
/home/chris/Downloads/
/home/chris/Downloads/*.*

そして、rsync(ホームフォルダー)を実行するのと同じフォルダーにあります。

ただし、rsyncはこのフォルダーもコピーしようとします。

何が間違っていますか?

回答:


88

あなたは提供されている絶対あなたの除外リスト内のパスを。

rsyncでは、すべてのexclude(またはinclude!)で始まるパス/は「転送のルート」に固定されます。

この場合の転送のルートは/home/chrisです。あなたがした場合:

rsync -Paz --exclude-from 'rsync-exclude.txt' / admin@192.168.1.65:

...その後、除外が機能するはずです(ただし、そのファイルシステムの他のすべてをコピーすることになります!)。

しかし、あなたは自分の同期しようとしているので、ホームディレクトリを、とのないサブディレクトリが存在しない/home/chrisという名前は"home/chris/Downloads"rsync一致するものが見つかっていません。

そのため/home/chrisrsync-exclude.txtファイルからパーツを削除してみてください。

実際、ファイルには1行だけが必要です。

/Downloads

先頭のを指定せずに、/という名前の他のディレクトリがある"Downloads"場合、それらも除外されることに注意してください。「トップレベル」(ソースディレクトリに関連する、「転送のルート」とも呼ばれる)Downloadsディレクトリのみを除外したいので、先頭の/

最も簡単な方法(少数のパスのみを除外する)

1つのディレクトリのみを除外する必要がある場合は、これを実行します(個別のファイルを回避します)。

rsync -Paz --exclude /Downloads /home/chris/ admin@192.168.1.65:LinuxHome

次の--excludeようにタグを連結することもできます。

rsync -Paz --exclude /Downloads --exclude '/Something Else' --exclude .hiddenFile /home/chris/ admin@192.168.1.65:LinuxHome

スラッシュがないため、コピーするすべてのディレクトリ.hiddenFileから除外されることに注意してください!

ただし、いくつかの除外が存在する場合は--exclude-from、ファイルを使用する方が適切です。

注意

私はあなたが右のそれを得ていることがわかりますが、rsyncのに新しいものはすべき最後のスラッシュに注意のを/home/chris/

rsyncマニュアルページを引用すると、「ソースの末尾/は、「名前でディレクトリをコピーする」のではなく、「このディレクトリの内容をコピーする」ことを意味すると考えることができます。」

あなたがその末尾のスラッシュをオフに左であれば、あなたはというディレクトリで終わるだろうchris、ターゲットディレクトリ内含むからすべて/home/chris(オリジナル除くDownloadsもちろん、ディレクトリを!)。


2

これは見た目では簡単かもしれませんが、ディレクトリと構文を除外する場合の注意点は次のとおりです。

SRC='/home/username'
DST='/run/media/username/EasyStoreRT/rsync'

rsync -avrh --stats                                 \
    --log-file=/home/username/log/rsync-home.log    \
    --exclude='/username/.cache'                    \
    --exclude='/username/.local/share/Trash'        \
    $SRC \
    $DST \

これらのディレクトリとその中のすべてのファイルを除外します。何らかの理由で、rysncは/ home / usernameを/.cacheに追加していませんでした。home /のみがそれ自体をアンカーするため、除外された各ディレクトリに/ usernameを追加する必要がありました。

マニュアルページには、「パターンが/で始まる場合、ファイルの階層内の特定の場所に固定されている場合、そうでない場合はパス名の末尾と照合されます」と書かれています。しかし、その階層はソースディレクトリの最初のディレクトリにすぎないようです。bashバージョン4.4.23(1)-releaseを使用しています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.