找到之间的区别。 -name'* .xyz'(点空间连字符)并查找。 .name'* .xyz'(点空间点)

时间:2014-12-02 15:35:31

标签: linux

我们的随叫随到的职员意外删除了我们的生产服务器中的文件。

我指示他发出一个find命令来删除这样的杂散文件(注意find dot space hyphen

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

但是当他将我的电子邮件中的命令复制/粘贴到他的shell会话时,连字符被更改为一个点(我目睹了它。他向我展示了它)并执行了以下命令(注意find dot space dot

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

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

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

我们使用的是运行KSH 93的红帽企业Linux服务器版本5.10(Tikanga)。

2 个答案:

答案 0 :(得分:3)

在实践中,查找从..name'.xyz'开始搜索的所有文件,将其解释为路径,可能最后两个文件提供了错误消息,例如

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

然后在那些上执行rm命令。

答案 1 :(得分:1)

如果您理解为什么program A B C被解释为与program A -B C不同,那么您将了解发生了什么。

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