Нет, вам не нужно передавать список имен файлов.
var1=$1
find. -maxdepth 1 -type f -name '*.png' -exec sh -c '
var1=$1; first=$2; shift 2
convert "$first" "$@" -evaluate-sequence "$var1"../out2/"$first"' sh "$var1" {} +
То есть дайте внутреннюю дочернюю оболочку $var1
в качестве первого аргумента (нулевой аргумент должен быть именем оболочки ).
Внутренняя оболочка удаляет $var1
из списка параметров, а также делает то же самое для первого имени пути, которое find
находит (Я не знаю почему, но это, по крайней мере, делает его эквивалентным тому, что я поверьте, ваш код делает ), а затем смещает их с $@
с помощью shift 2
.
Если вам нужно сделать это партиями ровно по 100:
var1=$1
find. -maxdepth 1 -type f -name '*.png' -print0 |
xargs -0 -n 100 sh -c '
var1=$1; first=$2; shift 2
convert "$first" "$@" -evaluate-sequence "$var1"../out2/"$first"' sh "$var1"
Причина, по которой это безопаснее, чем конвейерная передача вывода ls
, заключается в том, что пути передаются как список с нулевым -завершением, а не как список с символом новой строки -. Сценарий sh
одинаков в обоих вариантах и принимает $var1
в качестве аргумента командной строки.
Причина, по которой ваш код не работает, заключается в том, что оболочка sh -c
не знает $var1
своей родительской оболочки.
Связанные:
В tmux
, Ctrl + A для перехода к началу строки применяется только в режиме «копирования». Пока не в режиме «команда» или «копирование», положение курсора контролируется оболочкой или программой текущей панели, а не tmux
.
Итак, вам нужно сначала войти в режим «копирования», а затем нажать Ctrl + A для начала строки. Для ключей по умолчанию это будет:
Ctrl + A
[
Ctrl + A
Вам это подходит?