如何使用符号(或硬)链接(如 rsync)同步两个磁盘(或文件夹)?

如何使用符号(或硬)链接(如 rsync)同步两个磁盘(或文件夹)?

我正在寻找一个工具或一个外壳脚本或者另一个程序同步两个或多个文件夹或磁盘。

但它与 rsync 工具不同,因为,我不想复制丢失的文件,而是在其他文件夹中对其进行符号链接,例如:

如果在文件夹中A我们有文件A和其他文件夹C有一个文件d:

A

A

C

d

并在文件夹中我们有文件1和一个文件夹2有一个文件3:

1

2

3

我想要一个程序,例如,同步(符号同步,只是一个发明名称),由命令调用,例如,同步/A/B更改这些文件夹,如下所示:

A

A

C

d

1 (ln - 秒)

2(ln - 秒)

3(秒)

1

2

3

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

这不处理“特殊”文件,如块设备、命名管道、套接字等。

相关内容