Работает нормально:
==> scp my_log-bin.01393[0-9] root@192.168.103.66:/backup/
ошибка - нет такого файла или каталога:
==> scp my_log-bin.0139[30-99] root@192.168.103.66:/backup/
Помимо [0-9] вы можете использовать фигурные скобки и ... обозначения.
scp my_log-bin.0139{30..99} root@192.168.103.66:/backup/
[30-99]
в обозначении типа оболочки ("glob") означает « 3
, или цифра в диапазоне 0-9
, или 9
», т.е. это то же самое, что и [0-9]
.
Что вы хотите
# build list of files; note, won't work when filename contains a space or colon
files=""
for i in `seq 30 99`; do
files="$files my_log-bin.$i"
done
scp $files root@192.168.103.66:/backup/
bash(1)
реализует диапазоны [n-m]
для расширений имен файлов аналогично регулярным выражениям - диапазон представляет один символ:
$ for i in `seq 1 100` ; do touch $i ; done
$ ls
1 13 18 22 27 31 36 40 45 5 54 59 63 68 72 77 81 86 90 95
10 14 19 23 28 32 37 41 46 50 55 6 64 69 73 78 82 87 91 96
100 15 2 24 29 33 38 42 47 51 56 60 65 7 74 79 83 88 92 97
11 16 20 25 3 34 39 43 48 52 57 61 66 70 75 8 84 89 93 98
12 17 21 26 30 35 4 44 49 53 58 62 67 71 76 80 85 9 94 99
$ echo [0-9]
1 2 3 4 5 6 7 8 9
$ echo [30-99]
1 2 3 4 5 6 7 8 9
Также работает с буквами:
$ touch a b c d e f g h i j k l m n o p q r s t u v w x y z
$ echo [f-l]
f g h i j k l
Полная информация с man-страницы:
[...] Matches any one of the enclosed characters. A pair of
characters separated by a hyphen denotes a range
expression; any character that sorts between those two
characters, inclusive, using the current locale's
collating sequence and character set, is matched. If
the first character following the [ is a ! or a ^
then any character not enclosed is matched. The
sorting order of characters in range expressions is
determined by the current locale and the value of the
LC_COLLATE shell variable, if set. A - may be matched
by including it as the first or last character in the
set. A ] may be matched by including it as the first
character in the set.
Within [ and ], character classes can be specified
using the syntax [:class:], where class is one of the
following classes defined in the POSIX standard:
alnum alpha ascii blank cntrl digit graph lower print
punct space upper word xdigit
A character class matches any character belonging to
that class. The word character class matches letters,
digits, and the character _.
Within [ and ], an equivalence class can be specified
using the syntax [=c=], which matches all characters
with the same collation weight (as defined by the
current locale) as the character c.
Within [ and ], the syntax [.symbol.] matches the
collating symbol symbol.
Проблема с оболочкой решена хорошо, но если основной проблемой является копирование только новых файлов, я решаю эту проблему с помощью rsync:
rsync --progress -tvprogul my_log-bin.* root@192.168.103.66:/backup/
и пусть rsync определит, какие файлы уже находятся там.
Извлечение будет обрабатываться вашей оболочкой.
Если ваша оболочка bash, []
соответствует любому из вложенных символов, а [30-99]
не соответствует двум символам.
Как насчет использования следующего вместо:
scp my_log-bin.0139[3-9][0-9] root@192.168.103.66:/backup/