У меня есть скрипт, в котором я хочу найти все прямые подкаталоги, которые являются чисто числовыми, в папке и скопировать их в указанное место назначения. У меня есть проблемы, чтобы заставить регулярное выражение работать с +
и *
в 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]*"
Но похоже, что +
не работает, а *
, похоже, подстановочный знак.