You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于`sudo mv home/* *`命令的作用及目标参数`*`的疑问

sudo mv home/* * 命令的作用是什么?为什么我的文件夹消失了?

这个命令的危险之处在于shell会先把两个*通配符展开成具体的文件/目录列表,再传给mv——第二个*并不是你以为的“目标文件夹”,最终导致你的home目录被移动到了当前目录下字典序最后的那个目录里,所以你在原位置看不到它了,具体拆解如下:

1. 通配符的提前展开逻辑

shell在执行任何命令前,都会优先处理命令里的通配符(比如*),把它们替换成匹配的所有非隐藏文件/目录名,按字典序排列。假设你在home的父目录下执行这个命令,当前目录里有home、documents、downloads、videos这几个目录,home下有pictures、music,那么你写的命令会被shell转换成:

sudo mv home/pictures home/music documents downloads home videos

2. mv命令的执行规则

mv的核心逻辑是:

  • 当传入多个参数时,最后一个参数必须是目录,它会把前面所有的源文件/目录都移动到这个目录中;
  • 如果最后一个参数是文件,且仅传入一个源,会将源重命名为该文件名;否则直接报错。

在上面的例子里,最后一个参数是videos(目录),所以mv会把home/pictures、home/music、documents、downloads、home全部移动到videos目录下。这就导致你原本在当前目录的home目录“消失”了——它并没有被删除,只是被转移到videos目录里了,你可以去该目录找回。

3. 为什么会出现意外?

你原本预期第二个*代表“目标文件夹”,但实际上它被展开成了当前目录下的所有非隐藏内容,包括home本身。最终mv把所有前面的源(包括home目录)都移动到了最后一个展开项对应的目录中,完全偏离了你的预期。

正确的做法

如果你的需求是把home下的所有内容移动到当前目录,应该使用明确的目标路径(.代表当前目录):

sudo mv home/* .

内容的提问来源于stack exchange,提问作者JCMiguel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:32:15