0

如何查找由 4 个或 5 个字符组成的文件名?

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

4

3 回答 3

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

如果文件名包含数字而不是[a-zA-Z]do [a-zA-Z0-9]。所以它看起来像这样:

find . -regextype posix-egrep -regex '^./[a-zA-Z0-9]{4,5}\.cpp$'
于 2018-08-10T06:00:44.927 回答
2
shopt -s extglob globstar
printf '%s\n' **/?????(?).tgz
  • extglob: 启用扩展通配符
  • globstar:**将匹配所有文件和零个或多个目录和子目录
  • ?: 匹配任何单个字符
  • ?(pattern-list): 匹配给定模式的零次或一次出现

或者简单地说:

printf '%s\n' **/????.tgz **/?????.tgz
于 2018-08-10T07:49:40.090 回答
0

你可以使用这个find命令:

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

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

于 2018-08-10T06:07:48.070 回答