【发布时间】:2019-08-26 21:18:11
【问题描述】:
我的Downloads 目录中有一个目录reference,其中包含指向另一个目录的符号链接(使用ln -s 创建)。尝试删除符号链接时收到冲突的错误消息:
rm 返回“是目录”
rmdir 返回“不是目录”
这只发生在cellranger/(后跟一个正斜杠)而不是cellranger。
[tom@rlgsw68 cellranger]$ pwd
/home/tom/Downloads/reference
[tom@rlgsw68 cellranger]$ ls -lth
lrwxrwxrwx 1 tom genome 33 Apr 4 14:52 cellranger -> /analysisdata/genomes/cellranger/
[tom@rlgsw68 cellranger]$ rm cellranger/
rm: cannot remove directory `cellranger/': Is a directory
[tom@rlgsw68 cellranger]$ rmdir cellranger/
rmdir: cellranger/: Not a directory
[tom@rlgsw68 cellranger]$ rm cellranger
为什么这些删除符号链接的命令都不起作用,为什么会出现这些冲突的错误?在不删除源目录中的内容的情况下删除符号链接的推荐方法是什么。 rm -rf cellranger/ 也不会删除符号链接(但不会返回错误)。
信息:我正在运行一个 linux 服务器 (Debian 9.0)。 bash 和 zsh 都会出现这些错误。模棱两可的名称已从示例中删除。当目录除了内容之外还包含指向父目录的链接时,我遇到了这种情况:
/home/tom/Downloads/reference/cellranger/cellranger/ -> /analysisdata/genomes/cellranger/
【问题讨论】:
-
通常情况下,
rm会根据-r标志或lstat-ing 你给它的东西来决定是删除文件还是目录。可能unlink或lstat的路径会在任何其他检查之前检查您提供的字符串。如果您提供xyzzy/,它可能会立即假定这是一个目录。我的建议是不要将/添加到您要删除的任何内容中:-) -
rm -rf cellranger/不返回错误但无法删除目录的符号链接。rm -rf cellranger与rm cellranger一样工作。 -
根据定义,
cellranger/指向链接后面的目录,cellranger指向软链接本身。对于ls或stat等其他工具也是如此。所以rm cellranger是正确的命令。
标签: bash shell directory rm ln