如果我指定*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 [@]}”。
如果您有其他日志文件名称中没有空格,请重复此过程。
你可以看到为什么通配符在文件名中是一个非常糟糕的想法,当你脚本。
请做一些关于转义特殊字符的研究,并确保阅读手册。