【发布时间】:2014-03-10 17:10:04
【问题描述】:
关于文件名的正确处理,contain weird symbols like newlines 有很多说法。我认为使用 IFS 设置为换行符通常可以解决这个问题,除非很明显,如果一个人的名称中包含换行符。因此,作为一种防御手段,脚本可以首先检查子树是否至少有一个带有换行符的文件,然后停止并显示一条消息以首先修复名称。
令人惊讶的是,我无法让 find 与 -regex 匹配。唯一成功的方法是丑陋的
find . -name "*"$'\n'"*"
但例如find . -regex ".*\n.*" 不起作用。 Emacs 正则表达式应该允许像 \n 这样的转义字符,不是吗?有趣的是,它匹配另一个名称中带有字符n 的文件。尝试使用不同的 -regextypes 只是发现类型 awk sed posix-extended 和更多类型会匹配带有换行符的文件(比如说a\nxxx),但此外它们也会匹配带有字符n 的文件。诡异的。
另一方面,GNU 查找文档并没有说明对转义字符的支持,例如 \n。它们真的不受支持,所以我们不能在查找正则表达式中使用 \t \n \r \a 和类似的吗?
【问题讨论】:
标签: regex linux bash find gnu-findutils