Вы также можете использовать оператор fx
для фильтрации изображений по высоте/ширине, например,
identify -format '%[fx:(h>400 && w>400)]\n' image.png
выведет 1
, если изображение больше 400x400
и 0
, если оно равно или меньше 400x400
...
Предполагая нормальные имена файлов (без новых строк/пробелов/табов и т.д.), вы можете использовать identify
для печати имен изображений, которым предшествует либо 1:
, либо 0:
, обработать вывод, удалив строки, начинающиеся с 0:
и удалив ведущие 1:
в остальных строках, чтобы остались только имена файлов, по одному в строке, затем передать этот список в mogrify . .. @-
(синтаксис @
был добавлен в imagemagick v6.5. 2
):
identify -format '%[fx:(h>400 && w>400)]:%i\n' ./*.png | \
sed '/^1:/!d;//s///' | mogrify -resize '400x400' -- @-
Иначе, с помощью find
вы можете вывести только файлы с размером > 400x400, а затем передать результат в xargs
+ mogrify
(это менее эффективно, так как запускает оболочку для каждого файла, но должно работать со всеми типами имен файлов):
find . -maxdepth 1 -type f -name '*.png' -exec sh -c \
'identify -format "%[fx:(h>400 && w>400)]\n" "$0" | grep -q 1' {} \; -print0 \
| xargs -0 mogrify -resize '400x400'
Если вы являетесь пользователем zsh
, смотрите также этот ответ.
Вам нужна подстановка процесса , например ssh... < <(...)
. ssh... < $(my_command)
является подстановкой команды создает перенаправление с каждым словом из результата my_command
в качестве цели перенаправления.
Первый пример будет работать, если вы включите переменную LC_FOO
, чтобы она находилась в списке AcceptEnv
в файле /etc/ssh/sshd_config
на стороне сервера.
$ grep AcceptEnv /etc/ssh/sshd_config
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
AcceptEnv LC_FOO
Теперь работает:
$ LC_FOO=x ssh -o SendEnv=LC_FOO root@host.mydom.com 'printenv LC_FOO'
x
Я показал это в другом вопросе и ответе U&L под названием:Как я могу выполнить локальный скрипт на удаленной машине и включить аргументы? , а для вашего примера я бы рекомендовал сделать так:
$ ssh serverA "bash -s" -- <./ex.bash "arg1" "arg2"
метод heredocВы также можете использовать стиль heredoc, который я выделил в других вопросах и ответах U&L под названием:Просмотр удаленного значения $PATH внутри сценария оболочки:
[root@skinner ~]# ssh mulder 'bash -s <<EOL
> echo $HOSTNAME
> hostname
> EOL'
mulder.bubba.net
mulder.bubba.net