6

我需要在目录中查找所有以“课程”开头的子目录,但它们有下一个版本。例如

course1.1.0.0
course1.2.0.0
course1.3.0.0

那么我应该如何修改我的命令以使它给我正确的目录列表呢?

find test -regex "[course*]" -type d
4

3 回答 3

9

你可以做:

find test -type d -regex '.*/course[0-9.]*'

它将匹配名称为course加上一定数量的数字和点的文件。

例如:

$ ls course*
course1.23.0  course1.33.534.1  course1.a  course1.a.2
$ find test -type d -regex '.*course[0-9.]*'
test/course1.33.534.1
test/course1.23.0
于 2013-11-07T15:59:35.870 回答
3

您需要删除括号,并为正则表达式 ( .*) 使用正确的通配符语法:

find test -regex "course.*" -type d

您还可以使用更熟悉的 shell 通配符语法,通过使用-name选项而不是-regex

find test -name 'course*' -type d
于 2013-11-07T16:01:10.920 回答
1

我建议使用正则表达式来精确匹配版本号子目录:

find . -type d -iregex '^\./course\([0-9]\.\)*[0-9]$'

测试:

ls -d course*
course1.1.0.0   course1.1.0.5   course1.2.0.0   course1.txt

find . -type d -iregex '^\./course\([0-9]\.\)*[0-9]$'
./course1.1.0.0
./course1.1.0.5
./course1.2.0.0

更新:要完全匹配[0-9].3 次,请使用此 find 命令:

find test -type d -regex '.*/course[0-9]\.[0-9]\.[0-9]\.[0-9]$'
于 2013-11-07T16:26:36.337 回答