伙计们,我有一堆用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 ....
感谢。
答案 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*"