4

当我发出命令时

mv file1 *.file1

在 file1 所在的目录中,它消失了。它最终在哪里?我知道*在 Linux 下的文件名中是一个有效字符,我应该转义该*字符以获得预期的结果,例如

mv file1 \*.file1

但如果没有逃脱它,它被转移到了哪里?

4

1 回答 1

8

结果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
于 2013-02-26T13:44:37.397 回答