rsync를 사용하여 변경된 파일을 인쇄하는 방법은 무엇입니까?


27

rsync가 실제 파일을 전송하지 않고 다른 파일에 전체 파일 경로를 인쇄 할 수있는 방법이 있습니까?

또는 크기 변경이나 마지막 수정 시간 만 기준으로 두 개의 트리 (SSH 이상)에서 파일을 비교하는 방법이 필요합니다.

답변:


28

Rsync에는 dry-run 선택권:

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

이것이 당신이 원하는 것인지 확실하지 않습니다.

네가 원한다면 diff 두 나무를 가로 질러 파일, 당신은 어쩌면 재귀 적으로 검색 및 파이프와 파일에 모두 출력 할 두 방향을 검색 할 수 있습니다. 그런 다음 diff 파일을 비교합니다.


3
+1, 이것은 rsync에 내장되어 있습니다. 출력의 세부 사항 --dry-run 의 사용에 달려 있습니다. -v--progress options - 출력을 전혀 얻지 못한다면 필요에 따라이 옵션이 설정됩니다. 파일이 변경되지 않은 경우에도 디렉토리 이름을 전송한다는 사실을 알았지 만 출력을 통과하여 필터링 할 수 있습니다. sed 또는 유사합니다.
David Spillett

2
그러나 --dry-run은 파일이 동일해도 보여줍니다.
Quantum7

13

필자는 --out-format을 사용하여 세부 정보를보고이를 덜 파이핑하는 것을 선호합니다.

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

6

rsync -rvn localdir targetdir

-n은 조치를 표시하는 것을 의미합니다 (조치가 수행되지 않음).

'v'가 필요하거나 아무것도 표시하지 않습니다. (나머지 답변은 이것을 잊어 버린다 ...)


1
팔로어 -n은 "--dry-run"과 같습니다. :)
rogerdpack

0

나는 이런 식으로 갈 것이다 :

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

예 :

$ cd svn 
$ rsyncmeld myproject othermachine:myproject -v --exclude '*.svn' --exclude build

0

그 문제의 진실은 rsync -v ... 그리고 화면에 파일 이름을 출력합니다. ~이다. 양도되고있다 (또는 당신이 달리기를하고 있다면, 양도되었을 것이다). 확인하려면 rsync가 항목 전송 모드를 사용하려고했습니다. https://serverfault.com/a/618740/27813

다른 사람들이 지적했듯이, rsync는 기본적으로 파일 크기와 타임 스탬프를 기준으로 비교합니다. 둘 다 일치해야하는 경우 "델타 복사본"이 해당 파일에서 시작됩니다. 실제로 어떤 파일이 다른지 확인하려면 "-c"체크섬 모드를 사용하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.