如何查找包含4个或5个字符的文件名?
对于具有4个字符的文件名,我可以使用find . -name ????.tgz
,但如何将其扩展为4或5呢?
答案 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个字符的基本名称文件。 请注意,此正则表达式适用于全名,包括路径。