我在Macbook上运行以下命令:
mkdir ~/tmp/~
现在,我要删除此~/tmp/~
。
怎么做?它实际上不是一个链接,如果我运行rm -rf ~/tmp/~
,主文件都会被删除。
答案 0 :(得分:1)
太有趣了。这项任务可以通过这种方式完成。
# This form is safe and functional.
rm -rf ~/tmp/~
但是如果你试图这样做,你的家庭数据就会丢失:
# THIS FORM IS DANGEROUS; DO NOT USE IT
cd ~/tmp
rm -rf ~
答案 1 :(得分:0)
我同意Ivan X的评论,~
在此上下文中不会导致任何特定问题,rmdir ~/tmp~
会毫无问题地删除目录(请参阅下面的#1)。
但是,您所描述的是一个典型的Unix / BSD问题。要删除包含特殊字符的目录,必须确保shell忽略它们的插值。有两种方法可以实现这一目标。
rmdir ~/tmp/~
或...... -
开头的文件或目录,您可以使用--
告诉shell没有以下选项,ala rmdir -- -foo-
答案 2 :(得分:0)
太有趣了。这项任务可以通过这种方式完成。
# This form is safe and functional. rm -rf ~/tmp/~
但是如果你试图这样做,你的家庭数据就会丢失:
# THIS FORM IS DANGEROUS; DO NOT USE IT cd ~/tmp rm -rf ~
非常简单,因为(见Tilde Expansion):
如果单词以不带引号的波浪号字符开头 ('〜'),所有字符都是第一个 是不带引号的斜杠(或者所有字符,如果没有未加引号的斜杠) 被认为是波浪号前缀。如果没有任何字符 引用了tilde-prefix,后面是tilde-prefix中的字符 代字号被视为可能的登录名。如果这 login name是空字符串,代字号替换为值
HOME
shell变量。
因此,rm -rf ~
扩展为rm -rf $HOME
。
答案 3 :(得分:-1)
使用文件浏览器可以更好地删除任何带有趣名称的文件。它更简单,更安全。
如果您不想使用Finder,请使用任何其他基于文本的文件浏览器,例如emacs dired模式。
[...]
如果您坚持使用shell执行此操作...
ls -i # will show you the inode number of the files you have
获得正确的inode后,例如123456789,您可以使用find
将其删除。
find . -maxdepth 1 -type f -inum 123456789 -delete