我用来输出一些文件的程序显然不能很好地理解快捷方式“~”(目录),并且做了一些让我感到困惑的诡计。
它没有将文件放在我期望的位置 (/home/me),而是在它的子目录中创建了一个名为“~”的文件夹 (someprogram/~)
drwxr-xr-x 3 me 用户 4096 1 月 30 日 09:34 ~
如果我 cd 进入它我会回到 /home/me
这只是一个硬链接吗?我想如果我尝试删除它,我的主文件夹也会被删除。我怎样才能安全地删除它而不删除所有内容?
答案1
它不应该是硬链接,因为据我所知,文件夹不能通过 root 进行硬链接,即使这样也可能无法实现,因为系统限制。为了确保万无一失,请尝试以下操作(不要将 \ 与 / 混淆):
unlink \~
(您必须转义 ~,否则 shell 会将其解释为“取消链接 $HOME”)。
请注意,取消链接将删除它,即使它是一个常规文件(但如果它是一个目录则不会)
如果它是一个目录,只需执行以下操作:
rm -Ri \~
再次,转义波浪号。您需要执行 rm -Ri,这样它会在每次删除之前提示您,以防您忘记转义波浪号并意外删除您的主目录。
答案2
只有当单词以 开头时,shell 才会进行波浪符号扩展~
。在单词内部或末尾,不会对 进行特殊处理~
。许多 shell(bash、zsh、pdksh、tcsh、dash、jsh、sash)都是如此。还有一些 shell 不知道波浪符号扩展(sh(Bourne shell)、ash)
因此,如果您将其转义或使用路径而不是~
,则不会扩展任何内容。它是相对路径还是绝对路径并不重要,只要在 之前必须有内容即可~
。
rm -Ri \~
rm -Ri '~'
rm -Ri "~"
rm -Ri ./~
rm -Ri /full/path/~