나는 종종 여러 파일 형식을 변환하기 위해 for 루프를 사용합니다. 어떤 경우에는 텍스트 변환이나 변수가 발생할 때 대체가 올바르게 수행되었는지 확인하는 것이 좋습니다.
for i in *; do convert $i ${i%jpg}png; done
실행된 명령을 쉽게 표시할 수 있는 방법이 있습니까? 위의 예에 따르면 대략 다음과 같습니다.
convert image1.jpg image1.png
# command output
convert image2.jpg image2.png
# command output
# ...
답변1
set -x
for file in *jpg; do
convert "${file}" "${file%jpg}png"
done
set +x
쉘 옵션을 설정하면 -x
모든 매개변수 확장이 완료된 후에 실행되도록 설정되므로 실행된 모든 명령이 표시됩니다. +x
이 작업을 실행 취소하세요.
답변2
이런 종류의 경우 해당 xtrace
옵션( set -x
// set -o xtrace
/ setopt xtrace
... 로 설정 options[xtrace]=on
)도 사용하지만 서브셸에서는 다음과 같습니다.
(set -x; for f (*.jpg) convert -- $f $f:r.png)
(이것은 또한 작업 제어를 더 명확하게 만들고 우연히 변수가 환경을 오염시키는 것을 방지합니다 $f
).
서브셸을 만들지 않고 로컬로 옵션을 설정하려면 익명 함수와 옵션을 사용할 수도 있습니다 localoptions
.
(){ set -o localoptions -x; for f (*.jpg) convert -- $f $f:r.png; }
(그리고 해당 익명 함수에 로컬 local f
로 만들려면 a를 추가하세요 $f
).
for f (*.jpg) (set -x; convert -- $f $f:r.png)
덜 장황하게 만들고 프로세스를 저장합니다.
그러나 ImageMagick 이미지 변환의 경우 다음을 수행할 수 있습니다.
$ mogrify -verbose -format png -- *.jpg
a.jpg JPEG 3264x1836 3264x1836+0+0 8-bit sRGB 2.07201MiB 0.050u 0:00.053
a.jpg=>a.png JPEG 3264x1836 3264x1836+0+0 8-bit sRGB 7.69297MiB 2.680u 0:02.640
b.jpg JPEG 3264x1836 3264x1836+0+0 8-bit sRGB 2.07201MiB 0.060u 0:00.050
b.jpg=>b.png JPEG 3264x1836 3264x1836+0+0 8-bit sRGB 7.69297MiB 2.650u 0:02.617