Rsync imprime somente arquivos que seriam alterados

24

Existe uma maneira de fazer com que o rsync imprima os caminhos de arquivos completos para todos os arquivos que são diferentes sem realmente transferir arquivos?

Como alternativa, preciso de uma maneira de diferenciar os arquivos entre duas árvores (por SSH) com base apenas na alteração no tamanho ou na hora da última modificação.

    
por Joe Tsai 02.04.2013 / 05:49

4 respostas

26

O rsync tem uma opção dry-run :

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

Não tenho certeza se é isso que você quer.

Se você quiser diff dos arquivos em duas árvores, talvez você possa procurar recursivamente as duas direções com find e pipe para gerar saída para ls e pipe para um arquivo. Você poderia então usar diff para comparar os arquivos.

    
por 02.04.2013 / 06:32
11

Eu prefiro usar o --out-format para ver os detalhes, canalizando-o para menos:

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

rsync -rvn localdir targetdir

O -n significa mostrar apenas ações (sem que nenhuma ação seja executada).

Note que você precisa do 'v' ou não lhe mostrará nada! (o resto das respostas esquece isso ...)

    
por 27.08.2015 / 12:47
0

Eu gostaria de algo assim:

#! /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"

Por exemplo:

$ cd svn 
$ rsyncmeld myproject othermachine:myproject -v --exclude '*.svn' --exclude build
    
por 02.04.2013 / 18:43