我们的随叫随到的职员意外删除了我们的生产服务器中的文件。
我指示他发出一个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)。
答案 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'
的文件和目录,并删除那里的所有内容。