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

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

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

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

如果在文件夹中A我们有文件Ab和其他文件夹C使用文件d

A

A

b

C

d

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

1

2

3

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

A

A

b

C

d

1 (对数-秒)

2(对数-秒)

3(对数-秒)

1

2

3

a (对数-s)

b(对数-s)

c (对数-s)

d(对数-s)

在哪里ln-s表示在此文件夹中创建了指向相应文件的符号链接,例如,a (对数-s)表示命令ln -s /A/a /B/a被使用。

还可能发生另一件事,如果文件和链接具有相同的名称,则链接也应该自动具有不同的名称......

如果有人能帮助我,我将不胜感激。谢谢。

答案1

作为阿尔盖什回答我Unix和Linux答案如下。

非常感谢阿尔盖什

如果有人对这个脚本做了进一步的改进,也请发表答案=)。

尝试这个:

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

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

相关内容