我不太确定刚刚发生了什么,我所做的只是运行:
~/Desktop$ mv sublime.desktop \~/.local/share/applications/
之前的\
标志~/.local
是自动完成的,所以我认为可以运行它。
但是/.local/share/applications/
,该命令并没有将桌面文件移动到(这是我的意图),而是在桌面上创建了新文件夹。(~
原文件夹)
Liso@thinkpad:~/Desktop$ ls
~ backup.sql Apps
当我试图删除~
:
~/Desktop$ rmdir ~
rmdir: failed to remove ‘/home/liso’: Permission denied
那么我实际上错过了什么?
编辑
@Ravexina 要求我运行test
命令以确认它是目录还是文件。
Liso@thinkpad:~/Desktop$ test -d \~ && echo "it's a dir"
it's a dir`
你没有移动你的主目录...
我们将其
~
称为波浪号扩展,大多数情况下$HOME
它会在命令执行之前被替换为 shell 变量的值。\
是shell 中最强的引用类型。因此,使用
\~
您通过引用它来跳过波浪号扩展。意味着您实际上是在说:将“sublime.desktop”移动到一个名为“~...”的新文件中。我无法重现您的命令结果,但不知何故,您最终得到了一个完全命名为
~
.检查它是否是文件或目录并获取其内容列表:
然后将它们移动到正确的路径,如果它是一个文件来移动它你必须再次转义它的名字,否则它将被扩展为
/home/liso
:请记住,
rmdir ~
您正在尝试删除实际的主目录:/home/liso
而不是~
.波浪号由外壳扩展为用户的 $HOME,在您的情况下
/home/liso
。在第一个命令中,您转义了 ,~
因此它没有扩展到您想要的位置,而是mv
按字面意思传递给符号~
。我想你想跑
(带有可选的尾随
/
)我希望您说您运行的命令会像这样失败
因为
mv
不会像那样创建目标目录。如果你真的运行了那个命令,我想你一定已经有了一个~
在你Desktop
的路径中实际命名的目录,即如果是这样,您现在将在那里找到一个文件:
你应该跑
但如果你跑
这将创建一个文件
~
,因为sublime.desktop
将被重命名~
。尝试读取文件如果它包含
sublime.desktop
文件的内容,则运行波浪号仅在未引用时才会扩展到您的主目录(以及其他可能性)。将一个
\
字符放在它前面可以防止波浪号扩展。如有疑问,请$HOME
改用,因为它是具有可预测语法和行为的常规 shell 变量。要删除一个名为的目录
~
(首先确保其中没有任何重要内容),您应该使用与以前相同的技巧:转义波浪号,使其按字面意思解释。哦,您还需要rm
递归运行以删除非空目录: