2014-12-02 75 views
-2

我们的应召职员意外删除了我们的生产服务器中的文件。找不同。 -name'* .xyz'(点空格连字符)并查找。 .name'* .xyz'(点空格点)

我指示他发出find命令来删除像这样流浪文件(注意find dot space hyphen

find . -name '*.xyz' -exec rm '{}' \; 

但随着他复制/从我的电子邮件粘贴命令他的shell会话,连字符改为点(我亲眼目睹了他拿给我),下面的命令被执行(通知find dot space dot

find . .name '*.xyz' -exec rm '{}' \; 

这本地和递归删除的文件。包括符号链接。谢天谢地,我们能够从备份中恢复所有内容。

我服务器上的手册页只有-name标志。没有关于.name。为什么find忽略我指定的文件扩展名?

我们的Red Hat Enterprise Linux服务器上释放5.10(Tikanga),运行KSH 93

+0

没有什么特别的'.'s。 – simonzack 2014-12-02 15:39:17

回答

1

如果你明白为什么program A B C被解释为与program A -B C不同,那么你就会明白发生了什么。

find而言,您从未指定过扩展名,因为您从未使用过-name标志。将.name解释为搜索路径,就像.一样。 find可以让你像specify multiple paths那样。您告诉find要搜索名为.的文件和目录,名​​为.name的文件和目录以及名为'*.xyz'的文件和目录,并删除所有内容。

3

在实践中找到搜索从..name,并且'.xyz'开始的所有文件,解释这些的路径,可能是最后两个给出了如下错误消息:

find: `.name': No such file or directory 
find: `*.xyz': No such file or directory 

然后对这些执行rm命令。

相关问题