Скрипт:
#!/bin/sh
IFS=" " # join arguments with a space character
echo "$* = $(( $* ))"
С +
это просто:
./calc.sh 10 + 2
10 + 2 = 12
Но звездочка должна быть экранирована
./calc.sh 10 \* 2
10 * 2 = 20
или
./calc.sh 10 "*" 2
10 * 2 = 20
Отличный ответ Steeldriver в комментарии
find -L. -name '*.gif' -execdir sh -c 'for f;
do convert -coalesce "$f" "${f%.gif}%05d.png";
done' sh {} +
С зш
autoload -U zmv # best in ~/.zshrc
splitgif() convert -coalesce "$@"
zmv -p splitgif './(***/)(*).gif(#q-.)' './${1//\%/%%}${2//\%/%%}%05d.png'
Обратите внимание на необходимость ./
, чтобы избежать проблем с файлами с именами gif:whatever.gif
, например, и ${1//\%/%%}
, чтобы экранировать символы %
, которые могут быть найдены в путях к файлам.
***
совпадает с **
, но следует символическим ссылкам при спуске по дереву каталогов, как ваш-L
(#q...)
квалификатор глоба -
:примените следующие проверки к цели символической ссылки для символических ссылок(stat()
вместо lstat()
), как с вашим -L
. .
:только обычные файлы (эквивалент-type f
)