Yanıtlar:
Rsync'in bir dry-run
seçeneği var:
-n, --dry-run show what would have been transferred
İstediğinin bu olup olmadığından emin değilim.
diff
Dosyaları iki ağaçtan karşıya geçirmek istiyorsanız, iki dosyayı tekrarlı bir şekilde bulmak için ls komutunu bulmak ve bulmak için her iki dosyayı da bulup yönlendirebilirsiniz. diff
Dosyaları karşılaştırmak için kullanabilirsiniz .
rsync -rvn localdir targetdir
-N yalnızca eylemleri göstermek anlamına gelir (herhangi bir eylem yapılmadan).
'V' ye ihtiyacınız olduğunu ya da hiçbir şey göstermeyeceğini unutmayın! (Cevapların geri kalanı bunu unutur ...)
Diğer cevaplar ve https://serverfault.com/a/618740/114520
--dry-run
(veya -n
) kullanın--itemize-changes
(veya -i
) kullanın.--archive
(veya -a
) kullanın.egrep
nokta ile başlayan girişleri filtrelemek için kullanın (değişiklik yok)Bu size verir: rsync -nia source destination | egrep -v "sending incremental file list" | egrep -v "^\."
Sadece bir yol istiyorsanız, komutu değiştirebilirsiniz:
rsync -nia source destination | egrep -v "sending incremental file list" | egrep -v "^(\.|<)"
rsync -nia source destination | egrep -v "sending incremental file list" | egrep -v "^(\.|>)"
Ve sadece dosyalara ihtiyacınız varsa, sadece awk
sihir ekleyin :rsync -nia source destination | egrep -v "sending incremental file list" | egrep -v "^\." | awk '{print $2}'
Böyle bir şey için giderdim:
#! /bin/bash
set -eu ## Stop on errors and on undefined variables
## The local directory name
LOCAL_DIR=$1
## The remote directory in rsync sintax. Example: "machine:directory"
REMOTE_DIR=$2
shift
shift
# Now the first two args are gone and any other remaining arguments, if any,
# can be expanded with $* or $@
# Create temporary file in THIS directory (hopefully in the same disk as $1:
# we need to hard link, which can only made in the same partition)
tmpd="$(mktemp -d "$PWD/XXXXXXX.tmp" )"
# Upon exit, remove temporary directory, both on error and on success
trap 'rm -rf "$tmpd"' EXIT
# Make a *hard-linked* copy of our repository. It uses very little space
# and is very quick
cp -al "$LOCAL_DIR" "$tmpd"
# Copy the files. The final «"$@"» allows us to pass on arguments for rsync
# from the command line (after the two directories).
rsync -a "$REMOTE_DIR"/ "$tmpd/" --size-only "$@"
# Compare both trees
meld "$LOCAL_DIR" "$tmpd"
Örneğin:
$ cd svn
$ rsyncmeld myproject othermachine:myproject -v --exclude '*.svn' --exclude build
İşin gerçeği koşarsan olmasıdır rsync -v ...
ve ekrana bir dosya adı verir, bu dosya olduğu aktarılıyor (veya bir --dry işletilen yapıyorsanız, transfer olurdu). Rsync'in neden aktarmak istediğini belirlemek için, itemize modunu kullanın: https://serverfault.com/a/618740/27813
Diğerlerinin de belirttiği gibi, rsync varsayılan olarak sadece dosya boyutuna ve zaman damgasına dayanarak karşılaştırır, ki her ikisi de eşleşmesi gereken bu dosyada bir "delta kopyası" başlatılır. Hangi dosyaların gerçekten farklı olduğunu görmek istiyorsanız, "-c" sağlama toplamı modunu kullanın.
--dry-run
kullanımınız bağlı olacaktır-v
ve--progress options
- Bu nedenle, gerektiğinde bu seçenekler ayarlanan tüm kontrol altında hiçbir çıktı alırsanız. Dosyalar değişmediyse bile dizin isimlerini göndereceğini fark ettim, ancak çıktıyı geçirereksed
veya benzeri bir şekilde filtreleyebilirsiniz .