shell 如何在Mac中删除名为“~”的文件?

oymdgrw7  于 2023-06-30  发布在  Shell
关注(0)|答案(5)|浏览(119)

我在我的MacBook上运行以下命令:

mkdir ~/tmp/~

现在,我想删除这个~/tmp/~。怎么做?实际上它不是一个链接,如果我运行rm -rf ~/tmp/~,主文件都被删除了。

gfttwv5a

gfttwv5a1#

真有意思这个任务可以用这种方式完成。

# This form is safe and functional.
rm -rf ~/tmp/~

但如果你尝试这样做,你的家庭数据将丢失:

# THIS FORM IS DANGEROUS; DO NOT USE IT
cd ~/tmp
rm -rf ~
bqucvtff

bqucvtff2#

我同意Ivan X的评论,在这种情况下,~不会导致任何特定的问题,rmdir ~/tmp~删除目录也没有问题(参见下面的#1)。
然而,你所描述的是一个典型的Unix/BSD问题。为了删除包含特殊字符的目录,您必须确保shell忽略它们的插值。有两种方法可以实现这一点。
1.您可以使用完整路径,例如rmdir ~/tmp/~或...
1.对于以-开头的文件或目录,可以使用--告诉shell后面没有选项,例如rmdir -- -foo-

yacmzcpb

yacmzcpb3#

真有意思这个任务可以用这种方式完成。

# This form is safe and functional.
rm -rf ~/tmp/~

但如果你尝试这样做,你的家庭数据将丢失:

# THIS FORM IS DANGEROUS; DO NOT USE IT
cd ~/tmp
rm -rf ~

很简单,因为(参见波浪号展开):
如果一个单词以一个不带引号的波浪号字符('~')开头,那么直到第一个不带引号的斜杠的所有字符(或者所有字符,如果没有不带引号的斜杠的话)都被认为是波浪号前缀。如果波浪号前缀中的字符都未加引号,则波浪号前缀中波浪号后面的字符将被视为可能的登录名。如果这个登录名是空字符串,波浪号将替换为HOME shell变量的值。
因此,rm -rf ~被扩展为rm -rf $HOME

pcrecxhr

pcrecxhr4#

以下是我的经验,如果它有利于别人,MacBook Pro,MacOS Montery,版本12.6.5:
我不小心在我的主目录~/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 ./~/

就这样祝你好运

nbnkbykc

nbnkbykc5#

删除任何文件与一个有趣的名称是更好地完成与文件浏览器。它只是更容易和更安全。
如果您不想使用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

相关问题