当我“mv *”时发生了什么?没有显示任何错误,现在只剩下一个文件夹。为什么?

当我“mv *”时发生了什么?没有显示任何错误,现在只剩下一个文件夹。为什么?

执行的命令是“mv space *”,位于包含 14 GB 数据的文件夹中。

mv *

du -hs 

是一样的,那么 14 GB 的数据去哪儿了?我做了什么?

答案1

我的猜测是 bash 扩展了通配符,从而将每个文件夹移动到最后一个文件夹中。

例如:

$ ls
test1  test2  test3  test4

$ mv *

$ ls
test4

$ ls test4
test1  test2  test3

这里,mv *展开为mv test1 test2 test3 test4与格式对应的mv [OPTION]... SOURCE... DIRECTORY。这样,每个文件夹都移动到了最后一个。

答案2

正如@ssssteffff 所述,使用mv *,shell 会从当前目录中的文件进行通配符扩展。但是命令的行为mv取决于*扩展到多少个参数。如果有两个以上的参数,则最后一个参数必须是目录:

   mv [OPTION]... SOURCE... DIRECTORY

所以,

我创建了 5 个文件

$ touch 1 2 3 4 5
$ ls
1  2  3  4  5
$ mv *
mv: target ‘5’ is not a directory
$ ls
1  2  3  4  5

现在,如果我创建一个目录,作为通配符扩展的最后一个参数,那么:

$ mkdir 6
$ mv *
$ ls
6
$ ls 6
1  2  3  4  5

您应该仔细检查一下最后一个参数是什么。

  • 如果最后一个参数是一个目录,那么您的数据可能是安全的。
  • 如果参数的总数为 2,并且最后一个参数是目录,那么您的数据也许也是安全的。
  • 如果参数总数为 2,并且最后一个参数是一个文件,那么第二个文件肯定不存在。

您确定没有看到类似这样的错误吗?

 mv: target ‘5’ is not a directory`

相关内容