意外移动了主文件夹?

意外移动了主文件夹?

我不太清楚刚才发生了什么,我所做的就是跑步:

~/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

您没有移动您的主目录......

  • 我们称之为~波浪线扩展,大部分的时间$HOME在命令执行之前,它将被替换为 shell 变量的值。

  • \是最强的类型引用在壳中。

因此,使用\~引号可以跳过波浪号扩展。这意味着您实际上是在说:将“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 "~"

相关内容