查找名称中的特殊字符

查找名称中的特殊字符

如何查找名称中包含 ~ * 和其他特殊字符的文件?

例如

find . -name "*\*"

应该匹配“任何字符”然后*,但它不匹配任何内容;如何获得正确匹配文件的命令?

答案1

不同的实现find,但它们都应该处理通配符中的字符类(POSIX.2,第 3.13 节):

find . -name '*[~*]*'

如果换行符是您的“特殊”字符之一,您可能需要弄清楚如何让您的 shell 传递它来查找。在 Bash 中,您可以使用

find . -name $'*[\t \n]*'

例如,显示包含空格的文件。如果支持的话,更简单的方法是使用字符类:

find . -name '*[[:space:]]*'

答案2

如果您想要比匹配特定字符更通用的内容,则必须使用正则表达式。由于问题没有标记为“linux”,正确的答案将使用 POSIX:

find . | grep '[*~]'

如果你想让它特定于 Linux,你可以使用 GNUfind选项-regex(也支持自由BSD)。如果路径名有嵌入的换行符 (很少已完成,但用作经常反例),POSIX find+grep将不起作用。但是通过-regex扩展,这“可以”打印嵌入换行符的名称:

find . -regextype posix-awk -regex '.*[*~]'

虽然 find 的方式是用过的不是问题的一部分。

进一步阅读:

相关内容