rsync와 같은 심볼릭(또는 하드) 링크를 사용하여 두 개의 디스크(또는 폴더)를 동기화하는 방법은 무엇입니까?

rsync와 같은 심볼릭(또는 하드) 링크를 사용하여 두 개의 디스크(또는 폴더)를 동기화하는 방법은 무엇입니까?

나는 ~을 찾고 있다도구또는쉘 스크립트또는다른 프로그램두 개 이상의 폴더 또는 디스크를 동기화합니다.

그러나 누락된 파일을 복사하고 싶지 않고 다음과 같은 다른 폴더에 심볼릭 링크하기 때문에 rsync 도구와 다릅니다.

폴더에 있는 경우파일이 있어요그리고두번째및 기타 폴더파일이 있습니다:

두번째

그리고 폴더에는두번째파일이 있어요1그리고 폴더2파일이 있습니다:

두번째

1

2

나는 다음과 같은 프로그램을 원한다.동기화(기호 동기화, 그냥 발명된 이름), 명령에 의해 호출됩니다. 예:동기화/A/B해당 폴더를 다음과 같이 변경합니다.

두번째

1(ln - 초)

2(ln - 초)

3초)

그리고

두번째

1

2

a (ln-s)

b (ln-s)

c (ln-s)

d (ln-s)

어디ln-s해당 파일에 대한 심볼릭 링크가 이 폴더에 생성되었음을 나타냅니다. 예:a (ln-s)명령을 나타냅니다.ln -s /A/a /B/a사용되었습니다.

누구든지 나를 도울 수 있다면 매우 감사하겠습니다. 감사해요.

답변1

이 시도:

#!/bin/sh
srcdir="$1"
dstdir="$2"
if [ -h "$srcdir" ]; then
    val=`readlink "$srcdir"`
    if [ ! -h "$dstdir" ]; then
        rm -rf "$dstdir"
    fi
    ln -s "$val" "$dstdir"
elif [ -d "$srcdir" ]; then
    if [ ! -d "$dstdir" ]; then
        rm -rf "$dstdir"
    fi
    mkdir "$dstdir"
    for i in `ls -1A "$srcdir"`; do
        $0 "$srcdir/$i" "$dstdir/$i"
    done
    touch -a -r "$srcdir" "$dstdir"
    touch -m -r "$srcdir" "$dstdir"
else
    if [ ! -f "$dstdir" ]; then
        rm -rf "$dstdir"
    fi
    ln "$srcdir" "$dstdir"
fi

이는 블록 장치, 명명된 파이프, 소켓 등과 같은 "특수" 파일을 처리하지 않습니다.

관련 정보