我在我的MacBook上运行以下命令:
mkdir ~/tmp/~
现在,我想删除这个~/tmp/~。怎么做?实际上它不是一个链接,如果我运行rm -rf ~/tmp/~,主文件都被删除了。
~/tmp/~
rm -rf ~/tmp/~
gfttwv5a1#
真有意思这个任务可以用这种方式完成。
# This form is safe and functional. rm -rf ~/tmp/~
但如果你尝试这样做,你的家庭数据将丢失:
# THIS FORM IS DANGEROUS; DO NOT USE IT cd ~/tmp rm -rf ~
bqucvtff2#
我同意Ivan X的评论,在这种情况下,~不会导致任何特定的问题,rmdir ~/tmp~删除目录也没有问题(参见下面的#1)。然而,你所描述的是一个典型的Unix/BSD问题。为了删除包含特殊字符的目录,您必须确保shell忽略它们的插值。有两种方法可以实现这一点。1.您可以使用完整路径,例如rmdir ~/tmp/~或...1.对于以-开头的文件或目录,可以使用--告诉shell后面没有选项,例如rmdir -- -foo-。
~
rmdir ~/tmp~
rmdir ~/tmp/~
-
--
rmdir -- -foo-
yacmzcpb3#
很简单,因为(参见波浪号展开):如果一个单词以一个不带引号的波浪号字符('~')开头,那么直到第一个不带引号的斜杠的所有字符(或者所有字符,如果没有不带引号的斜杠的话)都被认为是波浪号前缀。如果波浪号前缀中的字符都未加引号,则波浪号前缀中波浪号后面的字符将被视为可能的登录名。如果这个登录名是空字符串,波浪号将替换为HOME shell变量的值。因此,rm -rf ~被扩展为rm -rf $HOME。
HOME
rm -rf ~
rm -rf $HOME
pcrecxhr4#
以下是我的经验,如果它有利于别人,MacBook Pro,MacOS Montery,版本12.6.5:我不小心在我的主目录~/work/xyz/~下创建了波浪号目录,当我试图删除它时,正如在许多其他地方所解释的那样,我一直得到rmdir: ./~: Directory not empty的错误然后我意识到我有其他的目录和文件在里面(也是偶然的,当试图从脚本记录一个进程的输出时),比如:~/work/xyz/~/out/qa/xyz.log和类似的这样的文件,所以我删除他们一个接一个,然后上升的目录也一个接一个:
~/work/xyz/~
rmdir: ./~: Directory not empty
~/work/xyz/~/out/qa/xyz.log
cd ~/work/xyz rm ./~/out/qa/xyz.log rm ./~/out/qa/abc.log ... rmdir ./~/out/qa rmdir ./~/out rmdir ./~/
就这样祝你好运
nbnkbykc5#
删除任何文件与一个有趣的名称是更好地完成与文件浏览器。它只是更容易和更安全。如果您不想使用Finder,请使用任何其他基于文本的文件浏览器,例如。emacs dired模式[...]如果你坚持要用 shell 来做这件事。。
ls -i # will show you the inode number of the files you have
找到正确的inode(比如123456789)后,可以使用find删除它。
find
find . -maxdepth 1 -type f -inum 123456789 -delete
5条答案
按热度按时间gfttwv5a1#
真有意思这个任务可以用这种方式完成。
但如果你尝试这样做,你的家庭数据将丢失:
bqucvtff2#
我同意Ivan X的评论,在这种情况下,
~
不会导致任何特定的问题,rmdir ~/tmp~
删除目录也没有问题(参见下面的#1)。然而,你所描述的是一个典型的Unix/BSD问题。为了删除包含特殊字符的目录,您必须确保shell忽略它们的插值。有两种方法可以实现这一点。
1.您可以使用完整路径,例如
rmdir ~/tmp/~
或...1.对于以
-
开头的文件或目录,可以使用--
告诉shell后面没有选项,例如rmdir -- -foo-
。yacmzcpb3#
真有意思这个任务可以用这种方式完成。
但如果你尝试这样做,你的家庭数据将丢失:
很简单,因为(参见波浪号展开):
如果一个单词以一个不带引号的波浪号字符('~')开头,那么直到第一个不带引号的斜杠的所有字符(或者所有字符,如果没有不带引号的斜杠的话)都被认为是波浪号前缀。如果波浪号前缀中的字符都未加引号,则波浪号前缀中波浪号后面的字符将被视为可能的登录名。如果这个登录名是空字符串,波浪号将替换为
HOME
shell变量的值。因此,
rm -rf ~
被扩展为rm -rf $HOME
。pcrecxhr4#
以下是我的经验,如果它有利于别人,MacBook Pro,MacOS Montery,版本12.6.5:
我不小心在我的主目录
~/work/xyz/~
下创建了波浪号目录,当我试图删除它时,正如在许多其他地方所解释的那样,我一直得到rmdir: ./~: Directory not empty
的错误然后我意识到我有其他的目录和文件在里面(也是偶然的,当试图从脚本记录一个进程的输出时),比如:
~/work/xyz/~/out/qa/xyz.log
和类似的这样的文件,所以我删除他们一个接一个,然后上升的目录也一个接一个:
就这样祝你好运
nbnkbykc5#
删除任何文件与一个有趣的名称是更好地完成与文件浏览器。它只是更容易和更安全。
如果您不想使用Finder,请使用任何其他基于文本的文件浏览器,例如。emacs dired模式
[...]
如果你坚持要用 shell 来做这件事。。
找到正确的inode(比如123456789)后,可以使用
find
删除它。