8

所以我继续移动一堆文件

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

然后我变得粗心和

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

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

当我*在命令末尾加上(星号)而不是(与号)时会发生什么&

4

2 回答 2

8

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

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

请参阅mv ./*指定目的地做什么?有关更详细的示例。

于 2013-08-20T00:20:56.720 回答
2

命令行末尾的星号与行中其他任何位置的星号的处理方式相同——它是匹配零个或多个字符的通配符。具体来说,在这种情况下,*inmv /source/filena* /dest/dest/ *将替换为当前目录中每个文件和文件夹的名称(以点开头的除外),并且该列表中最后出现的任何内容mv都是要尝试放置的位置一切。

于 2013-08-20T00:18:58.047 回答