regex - 如何查找名称中包含换行符的文件

标签 regex linux bash find gnu-findutils

有很多关于正确处理文件名的说法 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 find 文档没有说明任何关于支持转义字符(如 \n)的信息。它们真的不受支持所以我们不能在查找正则表达式中使用 \t\n\r\a 和类似的东西吗?

最佳答案

要查找所有包含换行符的文件和目录,您可以使用此 POSIX 兼容调用来查找:

find . -name '*
*'

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

find . -name \*$'\n'\*

或者不那么笨拙:

EOL=$'\n'
find . -name "*$EOL*"

或者使用-regex:

find . -regex ".*$EOL.*"

关于regex - 如何查找名称中包含换行符的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21726862/

相关文章:

linux - 如何在 xargs 中返回字符串的长度(特殊字符)

html - 解析 HTML NSRegularExpression

javascript - 匹配类中特定结尾之前的任何字符

javascript - 用于从 C++ 文件解析函数名称的正则表达式 (JavaScript) 在某些空白处不起作用

java - 从文本中提取信息

c++ - 将执行错误重定向到文件 c++

linux - 如何杀死从 kill 或 kill -9 脚本启动的进程产生的所有子进程

c++ - 为 AT91SAM9 ARM 处理器 Linux 用户空间程序优化的 FFT 和数学

linux - 如何将文件从 Windows 本地计算机移动到 Linux 远程服务器

c - ls 通过管道传输到命令行