mv命令末尾的星号是做什么的

时间:2013-08-20 00:11:44

标签: linux shell unix wildcard

所以我一直在移动一堆文件

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

然后我变得粗心和

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

OMG! ^c^c^c^c [终端命令无响应] 这里到底发生了什么?

当我在命令末尾放置*(星号)而不是&(&符号)时会发生什么?

2 个答案:

答案 0 :(得分:5)

shell扩展了通配符*mv命令永远不会看到通配符,只看到扩展的结果。

通配符*以字典顺序扩展到当前目录中的文件列表。如果最后一个文件是目录,则前面的所有文件(/source.filenafoo/source/filenabar/dest/desthello)都将移动到该子目录。如果最后一个文件不是目录,mv会抱怨“目标a.png不是目录”(或者说就是这样的话)。

有关详细示例,请参阅What does mv ./* without specifying destination do?

答案 1 :(得分:2)

命令行末尾的星号与行上任何其他位置的星号处理方式相同 - 它是匹配零个或多个字符的通配符。具体而言,在这种情况下,*中的mv /source/filena* /dest/dest/ *将被每个&的名称替换。当前目录中的每个文件和文件夹(以点开头的那些文件和文件夹除外),以及此列表中最后的内容是mv将尝试放置所有内容。