web-dev-qa-db-ja.com

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

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

rsync -Paz --exclude-from 'rsync-exclude.txt' /home/chris/ [email protected]:LinuxHome

rsync-exclude.txtのコンテンツは次のとおりです。

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

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

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

何が間違っていますか?

60
xpanta

除外リストにabsoluteパスを指定しています。

Rsyncでは、/で始まるすべてのexclude(またはinclude!)パスは「root of transfer」に固定されます。

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

rsync -Paz --exclude-from 'rsync-exclude.txt' / [email protected]:

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

しかし、homeディレクトリを同期しようとしているだけで、/home/chrisというサブディレクトリが"home/chris/Downloads"という名前ではないため、rsyncは一致するものを見つけられません。

/home/chrisファイルからrsync-exclude.txt部分を削除してみてください。

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

/Downloads

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

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

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

rsync -Paz --exclude /Downloads /home/chris/ [email protected]:LinuxHome

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

rsync -Paz --exclude /Downloads --exclude '/Something Else' --exclude .hiddenFile /home/chris/ [email protected]:LinuxHome

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

ただし、いくつかの除外を超える場合は、--exclude-fromとファイルを使用することをお勧めします。

あなたはそれを正しく理解したと思いますが、rsyncを初めて使用する人は最後のスラッシュに注意してください of /home/chris/

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

そのため、末尾のスラッシュを省略した場合、ターゲットディレクトリ内のchrisというディレクトリになります含む/home/chrisからのすべて(もちろん、元のDownloadsディレクトリを除く!)。

87
Lambart

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

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を使用しています。

2
jltrinchard