执行的命令是“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`