1

Я сделал небольшой скрипт bash для автоматического разделения двух моих мониторов с помощью imagemagick, когда я делаю скриншот.

#! /bin/bash
convert "$1" -crop 1024x600+0+0 +repage "${1//.png/}-left.png"
convert "$1" -crop 1280x1024+1024+0 +repage "${1//.png/}-right.png"

Это прекрасно работает, но правильно переименует его, только если это png (что в данном случае не проблема). Есть ли способ заставить его работать, чтобы расширение файла дошло до конца? Поэтому, если бы я вызвал этот скрипт (давайте назовем его splitimage) для файла oldscreenshot.jpg он дал бы мне oldscreenshot-left.jpg и oldscreenshot-right.jpg?

2 ответа2

1

Да, используя расширения ${param##word} и ${param%word} . Первый избавится от расширения, последний избавится от всего, кроме расширения

#! /bin/bash

convert "$1" -crop 1024x600+0+0 +repage "${1%.*}-left.${1##*.}"
convert "$1" -crop 1280x1024+1024+0 +repage "${1%.*}-right.${1##*.}"

пример

$ var=foo.jpg; echo "No extention: ${var%.*} | Extention only: ${var##*.}"
No extention: foo | Extention only: jpg
1

Да. Но используйте разбор в расширении вашего параметра (не в скобках, это нечто совершенно другое) вместо замены.

convert "$1" -crop 1024x600+0+0 +repage "${1%.*}-left.${1##*.}"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .