![如何使用符号(或硬)链接(如 rsync)同步两个磁盘(或文件夹)?](https://linux22.com/image/1292646/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E7%AC%A6%E5%8F%B7%EF%BC%88%E6%88%96%E7%A1%AC%EF%BC%89%E9%93%BE%E6%8E%A5%EF%BC%88%E5%A6%82%20rsync%EF%BC%89%E5%90%8C%E6%AD%A5%E4%B8%A4%E4%B8%AA%E7%A3%81%E7%9B%98%EF%BC%88%E6%88%96%E6%96%87%E4%BB%B6%E5%A4%B9%EF%BC%89%EF%BC%9F.png)
我正在寻找工具或shell 脚本或者另一个程序同步两个或多个文件夹或磁盘。
但它与 rsync 工具不同,因为我不想复制丢失的文件,而是在其他文件夹中对其进行符号链接,例如:
如果在文件夹中A我们有文件A和b和其他文件夹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
这不处理“特殊”文件,例如块设备、命名管道、套接字等。