나는 비슷한 것을 하고 싶다:
$ convert [a,b,c,d,e].png -resize 50% <current_match>_half.png
어떻게 해야 하나요? 현재 일치 항목을 저장하는 변수가 있습니까? 문서에서 아무 것도 찾을 수 없지만 잘못된 키워드를 찾고 있는 것일 수도 있습니다.
어쩌면 내가 이것을 할 수 있을 거라 생각했지만 xargs
, 나도 그것을 알 수는 없다.
답변1
ImageMagick 도구에는 와일드카드 기능이 제한되어 있습니다. 여러 파일 이름이나 리터럴 와일드카드를 전달하면 순차 번호가 지정된 출력 파일이 생성됩니다. 예:
convert [a-e].png -resize 50% half.png
등을 만듭니다 half-0.png
.half-1.png
입력 파일 이름을 일치시키려면 convert
루프에서 명시적으로 또는 도구를 통해 한 번에 하나씩 호출해야 합니다. (또는 나중에 파일 이름을 바꿀 수 있지만 그렇게 해도 아무런 이점이 없습니다.) 루프 내에서 zsh를 사용할 수 있습니다.파일 이름 조작또는문자열 연산구조.
for i in [a-e].png; do
convert $i -resize 50% %{i:t}_half.png
done
이것을 스크립트에서 사용하는 경우 추가해야 할 수도 있습니다.N
글로벌 예선이렇게 하면 일치하는 파일이 없으면 와일드카드 패턴이 비어 있는 것으로 확장됩니다.for i in [a-e].png(N); do …
Zsh에는 패턴에 따라 파일 이름을 바꾸는 도구가 함께 제공됩니다.zmv
. 다른 이름 기반 변환에 이를 사용할 수 있습니다.
autoload -U zmv
zmv -p convert -o '-resize 50%' '([a-e]).png' '${1}_half.png'
이러한 이름 패턴을 작성하는 다른 방법은 다음과 같습니다.
zmv -p convert -o '-resize 50%' '([a-e])(.png)' '${1}_half$2'
zmv -p convert -o '-resize 50%' -w '[a-e].png' '${1}_half.png'
zmv -p convert -o '-resize 50%' '[a-e].png' '${f:t}_half.png'
별칭을 만들고 다음을 넣을 수 있습니다 .zshrc
.
autoload -U zmv
alias zcp='zmv -C'
alias zln='zmv -L'
alias zconvert='zmv -p convert'
convert
아래 래퍼는 모든 옵션을 내부 따옴표로 전달해야 하는 요구 사항을 제거하므로 위의 별칭보다 약간 더 좋습니다 . 옵션 을 전달하는 경우 zmv
모든 옵션 앞에 와야 합니다 convert
.
zconvert () {
typeset -a zmv_options=
while [[ $1 = -[finqQsvwW] ]]; do
zmv_options+=($1)
done
zmv -p convert $zmv_options -o "$@[1,-3]" $@[-2] $@[-1]
}
답변2
glob에 의해 생성된 이름에 대한 루프로 이것을 작성할 수 있습니다.
for f in [abcde].png; do
convert "$f" -resize 50% "${f%.png}"_half.png
done
참고: 위의 예에는 구체적인 내용이 없습니다.嘚;모든 POSIX 호환 쉘에서 작동해야 합니다(스프린트,케시,세게 때리다,嘚, 등. ;거의 모든 최신 버전을 포함합니다.쉿).
Stephen Chazeras도 언급했습니다.嘚glob이 어떤 파일과도 일치할 수 없을 때 다른 기본 동작이 있습니다. 즉, 패턴 자체를 확장의 유일한 "결과"로 사용하는 대신 오류 메시지를 표시합니다. 이 경우 이 동작은 다른 셸에서도 조정할 수 있습니다(예 failglob
:nullglob
세게 때리다, 특수 ~(N)
전역 접두사케시및 NOMATCH
의 NULL_GLOB
옵션嘚).