具有特定文件扩展名的 UNIX 查找命令

具有特定文件扩展名的 UNIX 查找命令

我试图在桌面上的目录和子目录中查找文件名以 开头,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.oprac_[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"\.")。

相关内容