当我发出命令时
mv file1 *.file1
在 file1 所在的目录中,它消失了。它最终在哪里?我知道*
在 Linux 下的文件名中是一个有效字符,我应该转义该*
字符以获得预期的结果,例如
mv file1 \*.file1
但如果没有逃脱它,它被转移到了哪里?
结果mv file1 *.file1
取决于匹配的内容*.file1
*.file1
不匹配,则file1
重命名为*.file1
*.file1
只匹配一个文件,则file1
重命名为匹配文件的名称,匹配文件丢失。*.file1
恰好匹配一个文件,并且该文件是一个目录,则file1
移动到匹配的目录。*.file1
匹配多个文件,并且最后匹配的文件是一个目录,那么file1
,所有匹配的文件(除了这个目录)都将被移动到该目录。*.file1
匹配多个文件,并且最后匹配的文件不是目录,mv
则将失败并出现错误。参见下面的实验:
$ cat /etc/*-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=12.04
DISTRIB_CODENAME=precise
DISTRIB_DESCRIPTION="Ubuntu 12.04.2 LTS"
NAME="Ubuntu"
VERSION="12.04.2 LTS, Precise Pangolin"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu precise (12.04.2 LTS)"
VERSION_ID="12.04"
$ ls
$ touch file1
$ ls
file1
$ mv file1 *.file1
$ ls
*.file1
$ touch file1
$ ls
file1 *.file1
$ mv file1 *.file1
$ ls
*.file1
$ touch 1.file1
$ touch file1
$ mv file1 *.file1
mv: target `*.file1' is not a directory
$ ls
1.file1 file1 *.file1
$ mkdir z.file1
$ mv file1 *.file1
$ ls z.file1/
1.file1 file1 *.file1