为什么不logrotate的文件名globbing拿起名称中的空格的文件?

如果我指定*bar* {} logrotate将匹配foo-bar.log而不是foo bar.log

从我所读到的,logrotate的globbing应该像shell globbing一样,所以为了testing我已经运行了ls *bar* 。 但是,这打印出foo-bar.log foo bar.log所以我不相信他们是使用相同的全局匹配algorithm。

我如何编写一个logrotate通配符glob来匹配名称中的空格的文件?

 $ logrotate -v logrotate 3.8.7 - Copyright (C) 1995-2001 Red Hat, Inc. 

问候上校问题,

在回复其他人的意见时请保持公正。 每个人都在这里帮助某人,即使你不喜欢Eric Renouf的陈述,他也是完全正确的。 文件名空间必然会导致你的问题,如果你没有考虑到你的代码或改变你如何使用文件名,那么你将为自己创造更多的麻烦。

更详细的解释为什么这是一个坏主意在这里 。

也就是说,如果你阅读logrotate的手册页,你会在第三段中看到,

请注意,本节开头的第一个文件名的双引号允许logrotate在名称中用空格旋转日志。

这部分你似乎知道,但你也需要做的是考虑文件名的空间。

手册页中的下一句话是,

普通shell引用规则适用,支持“,”和\字符。

所以你必须用引号来避开这个空间,但是你的通配符会导致一个问题。 通配符必须在引号之外。

在Unix和Linux上有一个如何做到这一点的例子。

既然你有一个自定义的日志文件命名约定,我会假设你知道你的文件名之前的部分空间。

所以你可以创build一个数组

 files=( /dir/subdir/filename\ morefilename*.log ) 

然后运行日志旋转,告诉文件是“$ {files [@]}”。

如果您有其他日志文件名称中没有空格,请重复此过程。

你可以看到为什么通配符在文件名中是一个非常糟糕的想法,当你脚本。

请做一些关于转义特殊字符的研究,并确保阅读手册。