mv /tmp/folder/* /* 到底对我的文件系统做了什么?

M L*_*M L 4 wildcards

很难在谷歌上搜索特殊字符,这就是我在这里发布的原因。

我最近运行(以 root 身份) a mv /tmp/folder/* /*when I want to runmv /tmp/folder/* ./大错误!

东西坏了!很多文件被混淆并放在奇怪的地方,没有一个正常的 unix 命令(ls、dir、cat 等)起作用,一旦你注销,你就不能 ssh 重新登录——它会给你一个提示,但不接受旧密码。

运行ls /*告诉我它在/. 如果我试图绘制平行线,那么mv应该简单地将文件移动(或复制?)到/. 相反,发生了非常奇怪的事情,我只是好奇到底发生了什么。

更多信息:/tmp/folder 中的文件是从 windows 机器传输过来的,命名为 file (#).txt,其中 (#) 是最多两位数字,文件和括号之间有一个空格。有大约 40 个这样的文本文件。

lge*_*get 9

mv命令采用一个参数列表,这些参数可能是文件或目录。如果最后一个参数是一个目录,则所有其他参数都将移动到该目录中。

在您的情况下,mv /tmp/folder/* /*扩展为mv <the list of files in /tmp/folder> <the list of files in />. 因此,正如您可能猜到的那样,其中的所有文件/tmp/folders/以及除/ 最后一个之外的所有文件都移到了由/*(可能是/var)列出的最后一个文件夹中。

  • @ML 是的,或者如果您没有以 root 身份执行此操作。这是要带回家的真正教训。 (7认同)

Mic*_*zek 5

你描绘mv的论点是错误的。从手册页:

SYNOPSIS  
      mv [OPTION]... SOURCE... DIRECTORY
Run Code Online (Sandbox Code Playgroud)

mv需要很多SOURCE参数,但只有一个 destination DIRECTORYmv不能将文件移动到多个目的地,否则需要复制它。由于(如您所说)/*解析为 中的所有目录/,因此所有目录(最后一个除外)都将添加到SOURCE列表中,因此您将所有这些目录移动到命令行上最后列出的目录中。

如果您从 LiveCD 启动并安装驱动器,您可能可以消除损坏;根目录中将只剩下一个目录(可能/var),您可以将所有应该在根目录中的目录移出它