Сzsh
:
#! /bin/zsh -
typeset -Z3 page
files=(image-<0-3900>.jpg)
for ((page = 1; $#files; page++)) {
convert $files[1,13] -append./Merged/page_$page.jpg
files[1,13]=()
}
Обратите внимание, что поскольку имеется 3901 изображение (13 × 300 + 1 ), на последней странице будет только одно изображение.
Вы можете сделать что-то подобное с bash
, например:
#! /bin/bash -
shopt -s extglob
shopt -s failglob
set -- image-+([[:digit:]]).jpg
for ((page = 1; $#; page++)) {
printf -v padded_page %03d "$page"
convert "${@:1:13}" -append "./Merged/page_$padded_page.jpg"
(($# > 13)) || break
shift 13
}
POSIXly, при условии, что есть совпадающие файлы и еще менее тщательная проверка имен файлов:
#! /bin/sh -
set -- image-*.jpg
# disable split+glob, only retain empty removal on unquoted expansions:
set -o noglob; IFS=
page=1; while [ "$#" -gt 0 ]; do
padded_page=000$page
padded_page=${padded_page#"${padded_page%???}"}
convert $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} \
-append "./Merged/page_$padded_page.jpg"
[ "$#" -gt 13 ] || break
shift 13
page=$((page + 1))
done
Обратите внимание, что хотя здесь имена файлов очень простые (без пробелов, специальных символов... ), в этих кодах особое внимание уделено обработке произвольных символов. Однако обратите внимание, что convert
и другие утилиты imagemagick могут иметь проблемы с именами файлов, начинающимися с -
(, даже при использовании--
)или содержащих :
, поэтому лучше всего добавлять к путям файлов префикс ./
, чтобы избежать этих проблем (. ] например, используйте ./*.jpg
вместо*.jpg
).
Используйте параметр -F
(для фиксированного -поиска строки , ранее выполнявшегося с помощью утилиты fgrep
):
grep -F "u2py.DynArray value=b'F\xfeVOC\xfeD_VOC'" file
Символы .
и \
являются операторами регулярных выражений, один из которых соответствует любому одиночному символу, а другой используется для экранирования операторов регулярных выражений или введения новых (перед x
] однако поведение не определено POSIX и может варьироваться в зависимости от реализации ).
Таким образом, без -F
вам пришлось бы убегать от обоих.
Поскольку в Bourne -, как и оболочки или fish
, внутри "..."
, \
также есть особое значение экранирования для оболочки, вам также потребуется еще один раунд экранирования для нее:
grep "u2py\.DynArray value=b'F\\\\xfeVOC\\\\xfeD_VOC'" file
В csh или tcsh это будет:
grep "u2py\.DynArray value=b'F\\xfeVOC\\xfeD_VOC'" file
Оболочка rc
и производные не поддерживают "..."
в качестве оператора кавычек. Вам нужно будет использовать одинарные кавычки:
grep 'u2py\.DynArray value=b''F\\xfeVOC\\xfeD_VOC''' file
(одинарные кавычки обозначаются как ''
внутри одинарных кавычек. См. Как использовать специальный символ как обычный? для получения дополнительной информации ).