Linux:查找4或5个字符的文件名

时间:2018-08-10 05:31:34

标签: linux bash shell gnu-findutils

如何查找包含4个或5个字符的文件名?

对于具有4个字符的文件名,我可以使用find . -name ????.tgz,但如何将其扩展为4或5呢?

3 个答案:

答案 0 :(得分:3)

这是一种解决方案:

find . \( -name "????.cpp" -o -name "?????.cpp" \)

-o用于逻辑或

只需将.cpp替换为.tgz或您想要的任何内容。此正则表达式版本也可以执行相同的操作:

find . -regextype posix-egrep -regex '^./[a-zA-Z]{4,5}\.cpp$'
正则表达式^中的

是开始符号^./,表示以./开头。 [a-zA-Z]{4,5}表示后跟4至5个字符,\.表示。其中\是转义字符\.cpp$表示以.cpp结尾/ p>

如果文件名包含数字而不是[a-zA-Z],请执行[a-zA-Z0-9]。因此它将如下所示:

find . -regextype posix-egrep -regex '^./[a-zA-Z0-9]{4,5}\.cpp$'

答案 1 :(得分:3)

shopt -s extglob globstar
printf '%s\n' **/?????(?).tgz
  • extglob:启用extended globbing
  • globstar**将匹配所有文件以及零个或多个目录和子目录
  • ?:匹配任何单个字符
  • ?(pattern-list):匹配零个或一次出现的给定模式

或者简单地:

printf '%s\n' **/????.tgz **/?????.tgz

答案 2 :(得分:1)

您可以使用以下find命令:

find -type f -regextype egrep -regex ".*/[^./]{4,5}\.[^./]+$" 

设置正则表达式可捕获任何具有4个或5个字符的基本名称文件。 请注意,此正则表达式适用于全名,包括路径。