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はこのフォルダーもコピーしようとします。
何が間違っていますか?
除外リストに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
ディレクトリを除く!)。
これは見た目では簡単かもしれませんが、ディレクトリと構文を除外する場合の注意点は次のとおりです。
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を使用しています。