在mv命令的末尾加上星号*是什么意思?

8

我正在进行文件移动操作,涉及IT技术。

mv /source /dest &
mv /source/* /dest/dest/ &
...
...

然后我变得大意了

mv /source/filena* /dest/dest/ *

哦,天啊!^c^c^c^c [终端命令没有响应] 这里到底发生了什么?

如果我在命令的末尾放一个*(星号)而不是一个&(和号),会发生什么?


提示:alias mv='mv -i' 确保在覆盖文件之前必须确认。 - SheetJS
2个回答

8

Shell会展开通配符*,而mv命令只看到通配符展开后的结果,无法直接识别通配符。

通配符*按字典序扩展为当前目录下的文件列表。如果最后一个文件是目录,则所有前面的文件(/source.filenafoo/source/filenabar/dest/desthello)都会被移动到该子目录中。如果最后一个文件不是目录,则mv命令会报错“目标a.png不是目录”(或类似的提示信息)。

更多详细示例请参见What does mv ./* without specifying destination do?


2
在命令行的末尾添加星号与在任何其他位置添加星号一样,都是通配符,用于匹配零个或多个字符。具体来说,在这种情况下,mv /source/filena* /dest/dest/ * 中的 * 将被当前目录中每个文件和文件夹的名称(除了以点开头的文件)替换,而列表中最后一个名称就是 mv 要尝试放置所有内容的位置。请注意保留 HTML 标签。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接