命令行与mv - 文件消失了?

时间:2011-03-15 21:14:18

标签: bash

伙计们,我有一堆用gzip压缩的文件,如下所示:

    ...
la.20110208.gz
va.20110208.gz
la.20110209.gz
va.20110209.gz
    ...

我偶然输入以下命令

mv la.20110209* <enter>

虽然我打算输入

mv la.20110209* /docs_backup/<enter>

现在我找不到我的文件:只剩下va.20110209.gz了。知道la.20110209.gz去了哪里?我在Ubuntu上运行bash shell ....

感谢。

2 个答案:

答案 0 :(得分:4)

如果恰好有两个匹配该模式的文件,我担心你会丢失其中一个。当您输入:

mv *20110209*

... bash尝试在运行mv之前展开这些通配符,因此如果只匹配这两个文件,mv会看到:

mv blahblah.20110209-b.gz blahblah.20110209.gz

所以blahblah.20110209.gz会被blahblah.20110209-b.gz覆盖。如果有两个以上的文件匹配,那么您将收到错误:

mv: target `blahblah.20110209.gz' is not a directory

最好的情况是,如果*20110209*扩展到文件列表,将目录扩展为最后一项,在这种情况下,它们都将被移动到该目录中。然而,听起来好像这是我提到的第一个案例。

(由于这种原因,有些人喜欢将mv设为mv -i。)

答案 1 :(得分:3)

当您键入mv *20010209*时,您的shell执行路径名扩展,以便mv命令看到以下参数:

mv la.20110208.gz va.20110208.gz ... la.20110209.gz last_file

如果恰好last_file是一个目录,那么之前列出的所有文件都将被移动到那里。除非您只有2个匹配的文件,否则必须发生这种情况,因为否则会收到来自mv的错误。

通过以下命令查找与*20010209*匹配的目录,即文件所在的位置:

find . -type d -name "*20010209*"