不小心移动了主文件夹?

Lis*_*iso 6 command-line mv

我不太确定刚刚发生了什么,我所做的只是运行:

~/Desktop$ mv sublime.desktop \~/.local/share/applications/
Run Code Online (Sandbox Code Playgroud)

\之前的标志~/.local是自动完成的,所以我认为可以运行它。

但是/.local/share/applications/,该命令没有将桌面文件移动到(这是我的意图),而是在桌面上创建了新文件夹。(~是文件夹)

Liso@thinkpad:~/Desktop$ ls
~  backup.sql  Apps
Run Code Online (Sandbox Code Playgroud)

当我尝试删除时~

~/Desktop$ rmdir ~
rmdir: failed to remove ‘/home/liso’: Permission denied
Run Code Online (Sandbox Code Playgroud)

那么我实际上错过了什么?

编辑

@Ravexina 要求我运行test命令以确认它是目录还是文件。

Liso@thinkpad:~/Desktop$ test -d \~ && echo "it's a dir"
it's a dir`
Run Code Online (Sandbox Code Playgroud)

Rav*_*ina 10

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

  • 我们~称为波浪号扩展,大多数情况下$HOME,在命令执行之前,它将被替换为shell 变量的值。

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

所以使用\~你是通过引用它来跳过波浪号扩展。意味着您实际上是在说:将“sublime.desktop”移动到一个完全命名为“~...”的新文件。

我无法重现您命令的结果,但不知何故,您最终得到了一个完全命名为~.

检查它是文件还是目录并获取其内容列表:

test -d ~/Desktop/~ && ls -l ~/Desktop/~ || echo 'it is a file'
Run Code Online (Sandbox Code Playgroud)

然后将它们移动到正确的路径,如果它是一个将其移回的文件,则必须再次转义其名称,否则它将扩展为/home/liso

mv \~ new-name
mv "~" new-name # works
mv '~' new-name # also works
mv ~/Desktop/~  new-name # works fine too
Run Code Online (Sandbox Code Playgroud)

请记住,rmdir ~您正在尝试删除实际的主目录:/home/liso而不是~.


Zan*_*nna 6

波浪号由外壳扩展到用户的 $HOME ,在您的情况下/home/liso。在您转义的第一个命令中~,它没有扩展到您想要的位置,而是直接mv作为符号传递给~

我想你想跑

mv sublime.desktop ~/.local/share/applications
Run Code Online (Sandbox Code Playgroud)

(带有可选的尾随/

我希望你说你跑的命令会像这样失败

mv: cannot move 'sublime.desktop' to '~/.local/share/applications/': No such file or directory
Run Code Online (Sandbox Code Playgroud)

因为mv不会像那样创建目标目录。如果你真的运行了那个命令,我想你一定已经~在你的Desktop路径中有一个实际命名的目录,即

/home/liso/Desktop/\~/.local/share/applications
Run Code Online (Sandbox Code Playgroud)

如果是这样,您现在将在那里找到一个文件:

~/Desktop/\~/.local/share/applications/sublime.desktop
Run Code Online (Sandbox Code Playgroud)

你应该跑

mv ~/Desktop/\~/.local/share/applications/sublime.desktop ~/.local/share/sublime.desktop
Run Code Online (Sandbox Code Playgroud)

但是如果你跑了

mv sublime.desktop \~
Run Code Online (Sandbox Code Playgroud)

这将创建一个文件,~因为sublime.desktop将被重命名~。尝试读取文件

less ~Desktop/\~
Run Code Online (Sandbox Code Playgroud)

如果它包含sublime.desktop文件的内容,则运行

mv \~ ~/.local/share/applications/sublime.desktop
Run Code Online (Sandbox Code Playgroud)