rsyncなどのシンボリック(またはハード)リンクを使用して2つのディスク(またはフォルダ)を同期するには?

rsyncなどのシンボリック(またはハード)リンクを使用して2つのディスク(またはフォルダ)を同期するには?

私は〜を探していますツールまたはシェルスクリプトまたはその他のプログラム複数のフォルダまたはディスクを同期します。

ただし、不足しているファイルをコピーしたくなく、次のような他のフォルダにシンボリックリンクするため、rsyncツールとは異なります。

フォルダにある場合ファイルがあります。そして第二その他のフォルダファイルがありますD:

第二

D

そしてフォルダに第二ファイルがあります。1そしてフォルダ2ファイルがありますサム:

第二

1

2

サム

私は次のプログラムが欲しい。同期(シンボル同期、ちょうど発明された名前)、コマンドによって呼び出されます。例:同期/A/Bそのフォルダを次のように変更します。

第二

D

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

これは、ブロックデバイス、名前付きパイプ、ソケットなどの「特殊」ファイルを処理しません。

おすすめ記事