首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在文件名中找到包含换行符的文件

如何在文件名中找到包含换行符的文件
EN

Stack Overflow用户
提问于 2014-02-12 11:37:38
回答 1查看 1.3K关注 0票数 4

有那么多关于正确处理文件名的信息,包含奇怪的符号,比如换行符。我认为使用IFS设置为newline通常可以解决这个问题,但很明显,如果其中有一个包含换行符的名称,则例外。因此,作为一种防御手段,脚本可以首先检查子树是否至少有一个带有换行符的文件,然后停止使用一条消息来首先修复名称。令人惊讶的是,我无法让find-regex match中做到这一点。唯一成功的方法是一个相当丑陋的人

代码语言:javascript
复制
find . -name "*"$'\n'"*"

但是,例如,find . -regex ".*\n.*"不起作用。Emacs regex应该允许像\n这样的转义字符,不是吗?有趣的是,它将另一个文件与名称中的字符n相匹配。对不同的-regextypes进行了实验,结果发现类型为awksedposix-extended和更多的文件将与换行符(例如a\nxxx)匹配,但除此之外,它们还将匹配字符n的文件。真奇怪。另一方面,GNU文档并没有说明对转义字符(如\n )的任何支持。它们真的不受支持吗,所以我们不能在find中使用\t \n \r \a和类似的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-12 11:44:47

若要查找其中有新行的所有文件和目录,可以使用与POSIX兼容的对find的调用。

代码语言:javascript
复制
find . -name '*
*'

其中文字换行符嵌入在单引号中。bash支持额外的语法来指定换行符:

代码语言:javascript
复制
find . -name \*$'\n'\*

或者一点也不那么笨拙:

代码语言:javascript
复制
EOL=$'\n'
find . -name "*$EOL*"

或者使用-regex

代码语言:javascript
复制
find . -regex ".*$EOL.*"
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21726862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档