Regex соответствуют в CLI

Я предполагаю, что существуют репозитории как rpmfusion, которые отличают бесплатные и небесплатные пакеты для Fedora, Redhat и Centos.

Подробные инструкции относительно установки конфигурации пакета репозитория перечислены в:
http://rpmfusion.org/Configuration/

Детали о том, как включить другие репозитории в кратком руководстве по, в:
http://www.ehowstuff.com/how-to-prepare-other-yum-repositories-for-rhelcentos-5/

3
08.02.2013, 01:43
5 ответов

В Bash:

mv -t newfolder *.@(png|jpg)
  • ? (шаблон) нуль Соответствий или одно возникновение данных шаблонов
  • * (шаблон) нуль Соответствий или больше случаев данных шаблонов
  • + (шаблон) Соответствия одни или несколько случаев данных шаблонов
  • (Шаблон) Соответствия один из данных шаблонов
  • ! (шаблон) Соответствия что-либо кроме одного из данных шаблонов

Это требует extglob опции:

$ shopt extglob
extglob         on

Если это от Вас, может включить его с

$ shopt -s extglob
4
27.01.2020, 21:11
mv -t newfolder *.(png|jpg)

zsh синтаксис, но необходимо включить его с:

setopt extended_glob

Строго говоря необходимо записать это:

mv -t newfolder -- *.(png|jpg)

Как иначе, если некоторые имена файлов запускаются с a - символ, это не будет работать правильно.


mv -t newfolder -- *.@(png|jpg)

ksh синтаксис. Это может быть распознано zsh если Вы поворачиваетесь kshglob опция на (setopt kshglob) и ударом, если Вы поворачиваетесь extglob опция на (shopt -s extglob).

Однако отметьте это ksh и bash оба страдают от одной проблемы в том экземпляре: если существует нет png ни jpg файл, *.@(png|jpg) будет передан нетронутый mv, и если там будет существовать файл тем (по общему признанию необычным) именем, то это будет перемещено в newfolder.

В bash, можно избежать что проблема путем включения failglob опция. В ksh (последние версии только ksh93), лучшее, которое можно сделать, записать ~(N)*.@(png|jpg) (который был бы эквивалентом nullglob в ударе или (N) спецификатор globbing в zsh), который заставил бы шаблон ни до чего не расширяться, если бы нет никакого файла соответствия, и Вы затем получили бы ошибку от mv.

2
27.01.2020, 21:11

Как другие заявили, regex не является потребностью выполнить Вашу цель. Я предложу пример того, как выполнить это через regex, если ситуация действительно призывала к нему. Следующее будет работать в ударе:

files=();
for file in *; 
    [[ $file =~ \.(png|jpg)$ ]] && files+=("$file")
done

mv -t newfolder "${files[@]}"
1
27.01.2020, 21:11

Ответ Nykakin объясняет много. Только для добавления что-то указывает -

Нет ничего как regex в CLI. Это всегда globbing то, что Вы видите и используете.

Если это было бы чистым regex затем почему не файл и каталоги, запускающиеся с точки [.] отображены, когда Вы вводите ls *? В regex * соответствия все правильное? Но это не имеет место с шариком.

1
27.01.2020, 21:11
  • 1
    и zsh поддерживают regex в [[ встроенный, но не с файлом globbing. –  jordanm 07.02.2013, 19:06
  • 2
    Кроме того, одинокое * в соответствиях regex ничто, так как это означает "0 или больше из последнего знака". .* жадное соответствие всего. –  jordanm 07.02.2013, 19:14
  • 3
    ksh93 поддерживает regexp в globbing (см. ~(E)) но как много вещей ksh, это немного повреждается дизайном. –  Stéphane Chazelas 07.02.2013, 22:06

Я не знаю ничего с regexs или любым изящным синтаксическим сахаром получать желаемый результат. Вот способ получить желаемый результат, тем не менее, который находит использование.

find . -maxdepth 1 -mindepth 1 -type f -name '*.png' -o -name '*.jpg' -exec mv -t newfolder {} +
0
27.01.2020, 21:11
  • 1
    Можно использовать regexes с находкой: -regex '.*\(png\|jpg\)' –  Nykakin 07.02.2013, 19:22
  • 2
    Отметьте: не все версии поддержки находки -maxdepth или -regex. –  jordanm 07.02.2013, 20:32
  • 3
    1 для сверхспроектированной сложности. Как это короче или лучше, чем просто mv -- *.png *.jpg newfolder? –  tripleee 08.02.2013, 11:19
  • 4
    @triplee, как упомянуто выше, Ваше решение перестанет работать, если оба шаблона не будут соответствовать по крайней мере одному файлу (в зависимости от настроек оболочки). Если не будет никаких pngs, например, то это перестанет работать. Решение для находки работает так или иначе. –  user17591 08.02.2013, 18:26
  • 5
    Добавьте a nullglob зафиксировать это или просто проигнорировать ошибку. Во всяком случае моя точка действительно, что это - слишком сложное решение очень простой проблемы. –  tripleee 08.02.2013, 19:45

Теги

Похожие вопросы