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


12

执行的命令是具有14 GB数据的文件夹中的“ mv space *”。

mv *

du -hs 

是一样的,所以14 GB的数据哪里去了?我做了什么?


需要更多信息。哪个平台?
Jarmund 2014年

4
@Jarmund我认为假设* nix是安全的,因为提到的两个命令都是类Unix系统上的通用命令。在这方面,我可以肯定地说大多数外壳都可以正常工作。因此,即使没有明确说明确切的平台,我们也可以得出足够有用的答案。
2014年


另一个陷阱。您永远不要对不受信任的数据运行mvcp使用“ ”。这是因为“ ”被扩展,而名称如“ --verbose”的文件将获得命令行参数。改用什么:cp ./* anotherFolder
VasyaNovikov

Answers:


31

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

例如:

$ ls
test1  test2  test3  test4

$ mv *

$ ls
test4

$ ls test4
test1  test2  test3

在这里,mv *扩展为mv test1 test2 test3 test4对应的mv [OPTION]... SOURCE... DIRECTORY格式。因此,每个文件夹都移到最后一个文件夹中。


9
这个。顺便说一句,如果您想*mv(或cp)中使用,请查看它们的--target-directory开关。它确保您不会被这种事情所困扰。
CVn 2014年

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`
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.