我试图在桌面上的目录和子目录中查找文件名以 开头,prac_
后跟两位数字并以.c
或结尾的所有文件.o
find ./Desktop -type f -name "prac_[0-9][0-9]*" \( -name "*.c" -o -name "*.o" \)
我遇到的问题是上面的命令会显示文件,就像prac_99BLAHBLAH.o
我只想要格式为prac_99.c
.
答案1
在文件名通配模式中使用可以匹配任何字符串,因此名称与模式 、 或 之一匹配是正确*
的。prac_99BLAHBLAH.o
prac_[0-9][0-9]*
*.c
*.o
相反,使用
find ./Desktop -type f -name 'prac_[0-9][0-9].[co]'
文件名通配模式[co]
与单个字符c
或匹配o
,因此将其放在与 一起使用的模式的末尾-name
可以让您找到在名称末尾具有任一字符的文件名。
答案2
您只是没有限制数字和文件扩展名之间的字符。它可以全部是一个正则表达式:
find ./Desktop -type f -regex ".*/prac_[0-9][0-9][.][co]"
- 开头
.*/
是因为-regex
匹配文件路径而不仅仅是文件名。 - 这
[.]
是与句点匹配的单字符集。使用它是因为普通字符.
可以匹配任何字符。转义它\.
也可以,但我倾向于避免这种风格,因为不同编程语言的语法有所不同(例如,使用额外的转义符,如\\.
或 在原始字符串中,如r"\."
)。