ln -s并覆盖物理目录

时间:2016-06-29 08:41:02

标签: bash shell symlink

所以我基本上有一个始终存在的目录A 。我想用symbolik链接替换这个目录(这将在我的部署脚本中完成)。

我已尝试ln -sf app/cache A但它不起作用,它在 A 内创建,而不是覆盖它。

$ tree 
.
├── A
│   └── cache -> app/cache
└── app
    └── cache

3 directories, 1 file

是否可以只使用ln或者我必须事先删除A吗?

2 个答案:

答案 0 :(得分:2)

ln实用程序可能会被要求通过添加-f选项删除目标(如果已存在)。但是,POSIX标准表示这是通过调用C库例程unlink()和关于 函数完成的,标准说

  

除非进程具有适当的权限且实现支持在目录上使用path,否则unlink()参数不应命名目录。

我无法访问记录unlink()以删除目录的系统,或者记录-f标记为ln以删除目录的系统。

因此,你的解决方案是

$ rm -rf /path/to/A

或者,哪个会更安全,

$ mv -f /path/to/A /path/to/A.orig

在创建符号链接之前。

答案 1 :(得分:-1)

我建议总是阅读手册,它们非常方便。

  

-f, - force                 删除现有目标文件

[http://man7.org/linux/man-pages/man1/ln.1.html]
这是一个常见的选项,你可以在许多程序中找到,如rm,cp,mv ......