Linux найти регулярное выражение - PullRequest
1 голос
/ 02 декабря 2011

У меня есть скрипт, в котором я хочу найти все прямые подкаталоги, которые являются чисто числовыми, в папке и скопировать их в указанное место назначения. У меня есть проблемы, чтобы заставить регулярное выражение работать с + и * в find. Структура папок в примере выглядит следующим образом:

0/
1/
2/
3/
3.02asd/
3a/
4/
44/
45/
451/
452/
453/
4531/
4532/
45321/
45322/
45323/
666aa/
66a/
66aaa/
temp27/

Я получил это для работы со следующими командами:

find . -type d -maxdepth 1 -name "[0-9]" | while read f
do
    mv $f $TESTPATH
done

find . -type d -maxdepth 1 -name "[0-9][0-9]" | while read f
do
    mv $f $TESTPATH
done

find . -type d -maxdepth 1 -name "[0-9][0-9][0-9]" | while read f
do
    mv $f $TESTPATH
done

find . -type d -maxdepth 1 -name "[0-9][0-9][0-9][0-9]" | while read f
do
    mv $f $TESTPATH
done

find . -type d -maxdepth 1 -name "[0-9][0-9][0-9][0-9][0-9]" | while read f
do
    mv $f $TESTPATH
done

Не очень хорошо, но это работает, но это, вероятно, должно быть возможно с чем-то вроде:

find . -type d -maxdepth 1 -name "[0-9]+"

или

find . -type d -maxdepth 1 -name "[0-9][0-9]*"

Но похоже, что + не работает, а *, похоже, подстановочный знак.

1 Ответ

8 голосов
/ 02 декабря 2011

Используйте -regex вместо -name, например,

find . -maxdepth 1 -type d -regex ".*/[0-9]*"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...