Как насчет просто:
$ tar tf archive.tar.gz | grep foo
Если всегда существует два, просто:
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
Как насчет немного измененной версии того, что было предложено manatwork? Что-то вроде этого: for f in file*@2x.png; do zip ${f%@2x.png}.zip $f ${f/@2x./.}; done
Это выполняет итерации за 'секунду в парных' файлах только, и в поколении списка файлов нет никакого regexp.
bash
версия Вы используете? Мой 4.2.37. – manatwork 20.11.2012, 17:48extglob
не включен по умолчанию в интерактивных оболочках, но возможно Ваших поставках ОС с abashrc
это включает его (и extglob был добавлен для избиения 2.02-alpha1) – Stéphane Chazelas 20.11.2012, 23:25--enable-extended
включен по умолчанию (opt_extended_glob=yes
вconfigre
), но нет--enable-extended-glob-default
(opt_extglob_default=no
), это - погрешность в документации. Это, должно быть, было явно включено Вашим специалистом по обслуживанию ОС. Но точка, взятая о различных дистрибутивах удара, имеющих другой defauts. спасибо – Stéphane Chazelas 21.11.2012, 10:19