2013-11-07 2 views
4

Мне нужно посмотреть в каталоге для подкаталогов, которые начинаются с «курса», но у них есть следующая версия. Например,Shell - Как бороться с find -regex?

course1.1.0.0 
course1.2.0.0 
course1.3.0.0 

Итак, как мне изменить мою команду, чтобы она дала мне правильный список каталогов?

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

ответ

5

Вы можете сделать:

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 
+0

Совершенно то, что я хочу. Благодарю. – Farah

2

Вы должны удалить скобки и использовать правильный синтаксис подстановки для регулярных выражений (.*):

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

Вы также можете использовать более привычный синтаксис оболочки подстановочных , используя опцию -name вместо -regex:

find test -name 'course*' -type d 
+0

Спасибо за замечание. Более общий, но полезный и полезный, чтобы знать, что -name может помочь. +1 – Farah

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 

UPDATE: Чтобы соответствовать [0-9]. ровно в 3 раза использовать эту находку команды:

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

Ну, это более конкретный и сложный ответ, но я не понимаю, почему он не работает, когда меня нет в каталоге, где я ищу подкаталоги. Я обязан пройти «тест cd», а затем «найти» вместо «найти тест» напрямую ... Но это приятное предложение. +1 – Farah

+0

@Farah: Не знаю, почему это не сработало для вас. Я также показал свою продукцию выше. Вы можете использовать: 'find test -type d -iregex '^ \ ./ course \ ([0-9] \. \) * [0-9] $'' также – anubhava

+0

Это тоже не сработало для меня когда я делаю следующее, это работает: 'find test -type d -regex '. */course \ ([0-9] \. \) * [0-9] $'' – Farah