Đáng buồn thay, không có phương thức được xây dựng trong Rupync tại thời điểm viết.
Giải pháp của Mike Fitzpatrick sẽ hoạt động tốt, tuy nhiên nếu bạn có một cây thư mục rất lớn, bạn có thể muốn làm điều gì đó không khiến rsync đi qua tất cả các tệp một lần nữa
EDIT: Cũng có một lỗi trong đó nó sẽ không xóa một tệp đích ... tôi càng nhìn vào nó, giải pháp này bị hỏng ... Tôi sẽ bỏ nó vì nó có thể hoạt động trong trường hợp của bạn và nếu ai đó muốn để sửa chữa nó. Ngoài ra, ai đó nên gửi yêu cầu tính năng chính thức tới https://ormszilla.samba.org/enter_orms.cgi?product=rsync
Tôi đã viết kịch bản này:
#! /bin/bash
# Make a temp file for storing the output of rsync
tmpfile=$( mktemp ) &&
# Do all the hard work ( get the list of files we need to update ),
# but dont actually change the filesystem
rsync --dry-run --out-format='RSYNC_CONFIRM %i %n%L' "$@" | grep RSYNC_CONFIRM | awk '{ print $3 }' > $tmpfile &&
# Output to the user what we propose to do
rsync --dry-run --itemize-changes --files-from=$tmpfile "$@" &&
# Alternatively, we could just output $tmpfile... but whatever...
read -p "Continue? (y/n)?" &&
if [[ $REPLY = [yY] ]]
then
{
rsync --files-from=$tmpfile "$@"
}
fi
rm $tmpfile
Hãy thử dán đoạn script vào một tệp có tên rsync-confirm.bash
Sau đó chmod +x rsync-confirm.bash
Sau đó ./rsync-confirm.bash -rvh /etc/ /tmp/etc/
Kịch bản này có thể là một lỗi nhỏ, tôi nhận thấy rằng nó không thực sự thích nó nếu bạn không có dấu gạch chéo trên thư mục nguồn ...