rsync tidak dapat menghapus direktori tidak kosong

10

Saat menyinkronkan cadangan jarak jauh saya, saya mendapatkan kesalahan rsync cannot delete non-empty directory.

Saya tahu penyebabnya: Saya telah mengecualikan beberapa file dan ketika rsync mencoba menghapus direktori jarak jauh karena tidak ada secara lokal, itu tidak bisa karena tidak kosong. Tanpa pengecualian direktori akan dikosongkan.

Saya juga tahu saya bisa menyingkirkan masalah dengan menggunakan --delete-dikecualikan, tetapi itu tidak ingin saya inginkan.

Saya ingin melewatkan mengunggah file tertentu (karena terlalu besar untuk kecepatan unggahan saya), tetapi saya ingin menyimpannya yang sudah saya unggah beberapa waktu lalu jika ada secara lokal . Jika mereka tidak ada secara lokal, mereka harus dihapus. --delete-dikecualikan akan menghapus semuanya di sisi remote.

Itu juga berarti bahwa jika direktori tidak ada lagi secara lokal, itu harus dihapus bahkan jika itu berisi file yang dikecualikan.

Apakah mungkin untuk mengatur rsync untuk mencapai ini?

pelaut
sumber

Jawaban:

5

Gunakan ppengubah:

Tanda p menunjukkan bahwa suatu aturan tidak dapat diperbaiki, artinya diabaikan dalam direktori yang sedang dihapus. Misalnya, aturan default opsi -C yang mengecualikan hal-hal seperti "CVS" dan "* .o" ditandai sebagai mudah rusak, dan tidak akan mencegah direktori yang dihapus pada sumbernya agar tidak dihapus pada tujuan.

Sebagai contoh, saya menggunakan -Fopsi, yang "memberitahu rsync untuk mencari file .rsync-filter per-direktori yang telah ditaburkan melalui hierarki dan menggunakan aturan mereka untuk memfilter file dalam transfer."

My .rsync-filterberisi baris seperti ini untuk menyaring "kotoran" yang ditinggalkan Mac ini:

-p .DS_Store
-p ._*

Jika menggunakan excludebukan hanya -, tambahkan koma. Sebagai contoh :

exclude,p .DS_Store
exclude,p Thumbs.db
mivk
sumber
0

Anda dapat menggunakan pengubah pola include / exclude, add -s pada pola yang Anda gunakan. Ini memberitahu rsync bahwa mengecualikan aturan hanya untuk sisi pengirim.

-n: hanya periksa apa yang akan dihapus pada desc, jangan hapus pola: * .sh desc: / home / kg / tmp

bertujuan: ingin menghapus akhir file .sh di desc, tetapi jika Anda melakukan ini, Anda tidak dapat menghapus file pada desc: rsync -rvz --exclude * .sh --delete -n conkg [email protected]: / rumah / kg / tmp

harus berubah menjadi: silakan tambahkan -n ketika Anda menguji tes: rsync -rvz --exclude-from del.txt -n --hapus conkg [email protected]: / home / kg / tmp hapus nyata: rsync -rvz - kecualikan-dari del.txt - hapus conkg [email protected]: / home / kg / tmp cat del.txt -s * .sh

atau: rsync -rvz --exclude -s * .sh --hapus conkg [email protected]: / home / kg / tmp

kg deng
sumber
-2

cukup gunakan opsi '--max-size = xx' dan '--delete' dari rsync. Ini akan melakukan semuanya secara otomatis dan memenuhi semua kebutuhan Anda.

sparkie
sumber
Paling-paling itu akan menjadi solusi. Saya ingin melewatkan file mov, avi, dan cr2 sepenuhnya karena umumnya sangat besar. Tetapi yang sudah saya unggah pada baris yang lebih cepat beberapa waktu lalu harus disimpan. Sekarang masalahnya adalah bahwa file JPG terbesar lebih besar daripada file CR2 terkecil, sehingga solusi ini tidak ideal. Saya lebih suka menggunakan fitur kecualikan untuk memfilter pada nama file.
marlar