Архивирование файлов два два

Как насчет просто:

$ tar tf archive.tar.gz | grep foo
3
21.11.2012, 01:25
2 ответа

Если всегда существует два, просто:

for f in file+([0-9]).png; do zip "${f%png}zip" "$f" "${f/./@2x.}"; done

Обратите внимание, что вышеупомянутое будет работать, как из командной строки. Если Вы намереваетесь использовать его в сценарии, поместить shopt -s extglob где-нибудь перед той строкой. (extglob включен по умолчанию только в интерактивных оболочках.)

В старом bash расширенная обработка копирует это ужасное обходное решение, будет работать, но лучшее изменение логика, как предложено в другом ответе Leonid:

for f in file[0-9].png file*[0-9][0-9].png; do zip "${f%png}zip" "$f" "${f/./@2x.}"; done
5
27.01.2020, 21:10
  • 1
    я получаю эту ошибку после попытки Вашей команды... - удар: синтаксическая ошибка около неожиданного маркера' (' –  SpaceDog 20.11.2012, 17:43
  • 2
    я пробую его из командной строки и вижу эту ошибку –  SpaceDog 20.11.2012, 17:47
  • 3
    Который bash версия Вы используете? Мой 4.2.37. –  manatwork 20.11.2012, 17:48
  • 4
    extglob не включен по умолчанию в интерактивных оболочках, но возможно Ваших поставках ОС с a bashrc это включает его (и extglob был добавлен для избиения 2.02-alpha1) –  Stéphane Chazelas 20.11.2012, 23:25
  • 5
    Нет, --enable-extended включен по умолчанию (opt_extended_glob=yes в configre), но нет --enable-extended-glob-default (opt_extglob_default=no), это - погрешность в документации. Это, должно быть, было явно включено Вашим специалистом по обслуживанию ОС. Но точка, взятая о различных дистрибутивах удара, имеющих другой defauts. спасибо –  Stéphane Chazelas 21.11.2012, 10:19

Как насчет немного измененной версии того, что было предложено manatwork? Что-то вроде этого: for f in file*@2x.png; do zip ${f%@2x.png}.zip $f ${f/@2x./.}; done

Это выполняет итерации за 'секунду в парных' файлах только, и в поколении списка файлов нет никакого regexp.

4
27.01.2020, 21:10

Теги

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