Файлы с именами в определённом диапазоне чисел (как указать одной конструкцией?)
Модераторы: /dev/random, Модераторы разделов
-
shau-kote
- Сообщения: 417
- Статус: злобный хоббит
- ОС: Arch
Файлы с именами в определённом диапазоне чисел
Всем доброго времени суток.
Столкнулся сейчас с такой задачей. Есть папка с фотографиями, файлы в которой имеют вид DSCNxxxx.JPG, где x - цифра. Необходимо скопировать файлы, числа в именах которых входят в кокретный диапазон чисел, например 3947-3965. Как можно регулярным выражением передать cp необходимый список файлов?
З.Ы. Юзаю zsh.
Столкнулся сейчас с такой задачей. Есть папка с фотографиями, файлы в которой имеют вид DSCNxxxx.JPG, где x - цифра. Необходимо скопировать файлы, числа в именах которых входят в кокретный диапазон чисел, например 3947-3965. Как можно регулярным выражением передать cp необходимый список файлов?
З.Ы. Юзаю zsh.
-
allez
- Сообщения: 2223
- Статус: Не очень злой админ :-)
- ОС: SuSE, CentOS, FreeBSD, Windows
Re: Файлы с именами в определённом диапазоне чисел
Попробуйте так:
Это, правда, к регулярным выражениям отношения не имеет, но с поставленной задачей должно справляться. :)
И еще: не все числа в указанном диапазоне могут присутствовать в именах файлов, так как некоторые файлы могут быть удалены. Тогда, чтобы избавить себя от ненужных сообщений об ошибках, можно будет использовать конструкцию вроде этой:
Код: Выделить всё
cp DSCN{3947..3965}.JPG /where/to/copyЭто, правда, к регулярным выражениям отношения не имеет, но с поставленной задачей должно справляться. :)
И еще: не все числа в указанном диапазоне могут присутствовать в именах файлов, так как некоторые файлы могут быть удалены. Тогда, чтобы избавить себя от ненужных сообщений об ошибках, можно будет использовать конструкцию вроде этой:
Код: Выделить всё
ls DSCN{3947..3965}.JPG 2>/dev/null | cpio -pvdm /where/to/copy-
shau-kote
- Сообщения: 417
- Статус: злобный хоббит
- ОС: Arch
Re: Файлы с именами в определённом диапазоне чисел
Точно! Спасибо, allez. А я там дефис вместо точек ставил...
А, собственно, почему это не является регулярным выражением?..
А, собственно, почему это не является регулярным выражением?..
-
iglezz
- Сообщения: 43
- ОС: Debian testing
Re: Файлы с именами в определённом диапазоне чисел
shau-kote
Это фича bash:
Подробности в man bash (искать Brace Expansion)
Упс.. Не заметил сразу что у ТС zsh..
Это фича bash:
Код: Выделить всё
$ echo {1..5}
1 2 3 4 5
--{ ~ }------------------------------------------------------
$ echo {1..5..2}
1 3 5
--{ ~ }------------------------------------------------------
$ echo {5..-5..-2}
5 3 1 -1 -3 -5
--{ ~ }------------------------------------------------------
$ echo {a..z..2}
a c e g i k m o q s u w yПодробности в man bash (искать Brace Expansion)
Упс.. Не заметил сразу что у ТС zsh..
-
shau-kote
- Сообщения: 417
- Статус: злобный хоббит
- ОС: Arch
Re: Файлы с именами в определённом диапазоне чисел
А разве регулярные выражения - это не "фичи" шелла?.. 
-
ZyX
- Сообщения: 355
- ОС: Gentoo
Re: Файлы с именами в определённом диапазоне чисел
У zsh на этот случай помимо {N..M} есть <[N]-[M]>. *<->* выберет все файлы, содержащие хоть какое-то число, DSCN<3947->.JPG выберет все файлы, с числом большим или равным 3947 (при этом начальные нули игнорируются), DSCN<3947-3965>.JPG выберет то, что вы просили. Надо отметить, что <0-2>* заберёт и файл 0, и файл 1, и файл 10 (так как <-> заберёт единицу, а 0 заберёт звёздочка), поэтому после <-> надо обязательно указать что-то, подо что не может подпадать цифра. В вашем примере это точка перед расширением.
-
allez
- Сообщения: 2223
- Статус: Не очень злой админ :-)
- ОС: SuSE, CentOS, FreeBSD, Windows
-
shau-kote
- Сообщения: 417
- Статус: злобный хоббит
- ОС: Arch
Re: Файлы с именами в определённом диапазоне чисел
В смысле, реализуются они шеллом.
(Wikipedia) писал(а):Регуля́рные выраже́ния (англ. regular expressions, сокр. RegExp, RegEx, жарг. регэ́кспы или ре́гексы) — это формальный язык поиска и осуществления манипуляций с подстроками в тексте, основанный на использовании метасимволов (символов-джокеров, англ. wildcard characters). По сути это строка-образец (англ. pattern, по-русски её часто называют «шаблоном», «маской»), состоящая из символов и метасимволов и задающая правило поиска.
По-моему, Ваш пример вполне попадает под это определение. Нет?..
ZyX, круто, не знал. Спасибо огромное.
-
allez
- Сообщения: 2223
- Статус: Не очень злой админ :-)
- ОС: SuSE, CentOS, FreeBSD, Windows
Re: Файлы с именами в определённом диапазоне чисел
Таки нет. Как вполне справедливо заметил iglezz, это особенность именно конкретной оболочки - bash, zsh... В других оболочках (например, tcsh) конструкции вида {a..b} не работают. Регулярным же выражениям "по барабану", в какой среде они применяются - sh, bash, pdksh...shau-kote писал(а): ↑14.01.2011 21:01(Wikipedia) писал(а):Регуля́рные выраже́ния (англ. regular expressions, сокр. RegExp, RegEx, жарг. регэ́кспы или ре́гексы) — это формальный язык поиска и осуществления манипуляций с подстроками в тексте, основанный на использовании метасимволов (символов-джокеров, англ. wildcard characters). По сути это строка-образец (англ. pattern, по-русски её часто называют «шаблоном», «маской»), состоящая из символов и метасимволов и задающая правило поиска.
По-моему, Ваш пример вполне попадает под это определение. Нет?..
-
KiWi
- Бывший модератор
- Сообщения: 2521
- Статус: статус, статус, статус
-
shau-kote
- Сообщения: 417
- Статус: злобный хоббит
- ОС: Arch
Re: Файлы с именами в определённом диапазоне чисел
То есть, если я правильно понял, регулярное выражение шелл сравнивает со всеми имеющимися значениями (строками), а конструкцию {a..d} просто раскрывает в a, b, c, d. Так?
-
/dev/random
- Администратор
- Сообщения: 5456
- ОС: Gentoo
-
t.t
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: Файлы с именами в определённом диапазоне чисел
За исключением поправки, которую дал /dev/random, да. Заметьте также, что это не маска:
Код: Выделить всё
$ touch a c d
$ ls [abcd]
a c d
$ ls {a..d}
ls: невозможно получить доступ к b: Нет такого файла или каталога
a c d¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
shau-kote
- Сообщения: 417
- Статус: злобный хоббит
- ОС: Arch
Re: Файлы с именами в определённом диапазоне чисел
Спасибо, разобрался. 