我不太清楚刚才发生了什么,我所做的就是跑步:
~/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`
答案1
您没有移动您的主目录......
因此,使用\~
引号可以跳过波浪号扩展。这意味着您实际上是在说:将“sublime.desktop”移动到名为“~...”的新文件中。
我无法重现你的命令的结果,但不知何故你最终得到了一个恰好名为的文件/目录~
。
检查它是否是文件或目录并获取其内容列表:
test -d ~/Desktop/~ && ls -l ~/Desktop/~ || echo 'it is a file'
然后将它们移动到正确的路径,如果它是一个文件,要将其移回,您必须再次转义其名称,否则它将扩展为/home/liso
:
mv \~ new-name
mv "~" new-name # works
mv '~' new-name # also works
mv ~/Desktop/~ new-name # works fine too
请记住,rmdir ~
您尝试删除的是实际的主目录:/home/liso
而不是~
。
答案2
波浪号被 shell 扩展为用户的 $HOME,在你的情况下是/home/liso
。在第一个命令中,你对 进行了转义,~
因此它没有扩展到你想要的位置,而是直接作为mv
符号传递给它~
。
我觉得你想跑
mv sublime.desktop ~/.local/share/applications
(带有可选的尾随/
)
我希望你说的命令会像这样失败
mv: cannot move 'sublime.desktop' to '~/.local/share/applications/': No such file or directory
因为mv
不会创建这样的目标目录。如果你真的运行了那个命令,我想你肯定已经~
在你目录中有一个Desktop
以该路径命名的目录,即
/home/liso/Desktop/\~/.local/share/applications
如果是的话你现在会在那里找到一个文件:
~/Desktop/\~/.local/share/applications/sublime.desktop
你应该跑
mv ~/Desktop/\~/.local/share/applications/sublime.desktop ~/.local/share/sublime.desktop
但如果你跑
mv sublime.desktop \~
这将创建一个文件,~
因为sublime.desktop
将被重命名~
。尝试读取文件
less ~Desktop/\~
如果它包含文件的内容sublime.desktop
,则运行
mv \~ ~/.local/share/applications/sublime.desktop
答案3
波浪号字符只有在未加引号时才会扩展至您的主目录(以及其他可能性)。在波浪号\
字符前面放置一个字符可防止波浪号扩展。如有疑问,请使用$HOME
,因为它是具有可预测语法和行为的常规 shell 变量。
要删除名为的目录~
(首先确保其中没有任何重要内容),您应该使用与之前相同的技巧:转义波浪号,以便按字面意思解释。哦,您还需要rm
递归运行以删除非空目录:
rm -r "~"