Rsync kullanılarak değiştirilmiş olan dosyalar nasıl yazdırılır?


32

Herhangi bir dosyayı aktarmadan, tüm dosya dosyalarına tam dosya yolunu basması için rsync almanın bir yolu var mı?

Alternatif olarak, dosyaları yalnızca boyuttaki değişikliklere veya en son değiştirilen zamana göre iki ağaç (SSH üzerinden) arasında dağıtacağım.

Yanıtlar:


33

Rsync'in bir dry-runseçeneği var:

-n, --dry-run               show what would have been transferred

İstediğinin bu olup olmadığından emin değilim.

diffDosyaları 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. diffDosyaları karşılaştırmak için kullanabilirsiniz .


3
+1, bu rsync'de yerleşiktir. Çıktısının detay --dry-runkullanımınız bağlı olacaktır -vve --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çirerek sedveya benzeri bir şekilde filtreleyebilirsiniz .
David Spillett

4
Ancak --dry-run aynı olsa bile dosyaları gösteriyor gibi görünüyor.
Quantum7

14

Ayrıntıları görmek için --out-formatını kullanmayı tercih ediyorum, daha az borulayıp:

rsync -azh --dry-run --delete-after --out-format="[%t]:%o:%f:Last Modified %M" source destination | less

7

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 ...)


2
-N takipçileri için -n "--dry-run" :) 'e
eşittir

1

Diğer cevaplar ve https://serverfault.com/a/618740/114520

  • değişiklik yapmamak için --dry-run(veya -n) kullanın
  • değişiklikleri bulmak için --itemize-changes(veya -i) kullanın.
  • tüm alt dizinleri almak için --archive(veya -a) kullanın.
  • egrepnokta 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:

  • kaynaktan hedefe yapılan değişiklikler için: rsync -nia source destination | egrep -v "sending incremental file list" | egrep -v "^(\.|<)"
  • hedeften kaynağa yapılan değişiklikler için: rsync -nia source destination | egrep -v "sending incremental file list" | egrep -v "^(\.|>)"

Ve sadece dosyalara ihtiyacınız varsa, sadece awksihir ekleyin :rsync -nia source destination | egrep -v "sending incremental file list" | egrep -v "^\." | awk '{print $2}'


0

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

0

İş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.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.