有那么多关于正确处理文件名的信息,包含奇怪的符号,比如换行符。我认为使用IFS设置为newline通常可以解决这个问题,但很明显,如果其中有一个包含换行符的名称,则例外。因此,作为一种防御手段,脚本可以首先检查子树是否至少有一个带有换行符的文件,然后停止使用一条消息来首先修复名称。令人惊讶的是,我无法让find在-regex match中做到这一点。唯一成功的方法是一个相当丑陋的人
find . -name "*"$'\n'"*"但是,例如,find . -regex ".*\n.*"不起作用。Emacs regex应该允许像\n这样的转义字符,不是吗?有趣的是,它将另一个文件与名称中的字符n相匹配。对不同的-regextypes进行了实验,结果发现类型为awk、sed、posix-extended和更多的文件将与换行符(例如a\nxxx)匹配,但除此之外,它们还将匹配字符n的文件。真奇怪。另一方面,GNU文档并没有说明对转义字符(如\n )的任何支持。它们真的不受支持吗,所以我们不能在find中使用\t \n \r \a和类似的?
发布于 2014-02-12 11:44:47
若要查找其中有新行的所有文件和目录,可以使用与POSIX兼容的对find的调用。
find . -name '*
*'其中文字换行符嵌入在单引号中。bash支持额外的语法来指定换行符:
find . -name \*$'\n'\*或者一点也不那么笨拙:
EOL=$'\n'
find . -name "*$EOL*"或者使用-regex
find . -regex ".*$EOL.*"https://stackoverflow.com/questions/21726862
复制相似问题