我为另一个团队的某个人编写了一个符号链接脚本,让其在我无权访问的目录中运行,这似乎导致了一些意想不到的事情。
destination_path=/path/to/dest/
source_path=/path/to/src
for dir in first second
do
# replace existing symlink
for subdir in {1000..1020}
do
ln -sf $source_path/$dir/$subdir $destination_path/$dir/$subdir
done
done
在脚本运行之前path/to/dest/$dir
包含1000, 1001, ..., 1020
链接到一组不同目录的符号链接。我的脚本旨在用指向的符号链接替换这些符号链接/path/to/src/$dir/$subdir
,但它似乎没有这样做,而是在现有符号链接中创建了符号链接。
因此,例如,/path/to/dest/$dir/1000
曾经是一个符号链接,在运行我的脚本后/path/to/dest/$dir/1000
仍然指向同一个地方,但在/path/to/dest/$dir/1000
,有一个符号链接1000
指向$source_path/$dir/$subdir/1000
。
我的脚本不应该发生这种情况,对吗?我尝试使用模拟的目标目录结构在本地重现此问题,但我无法重现此问题。
编辑:经过进一步研究,我似乎应该使用而ln -sfn
不仅仅是ln -sf
? 解决这个问题最简单的方法是什么?
指向目录的符号链接(几乎总是)被视为该目录。一般来说,如果你想更新一个符号链接,删除它并重新创建它。
像这样使用你的脚本的变体,
请记住删除所有三个
echo
当你高兴时它会做你需要它做的事。