아래와 같은 스크립트가 있습니다.
처리할 파일은 images.txt
한 줄씩 읽는 파일에 저장됩니다. 첫 번째 echo
명령은 파일 이름을 올바르게 표시하지만 후속 ImageMagick 명령은 이미지 처리에 실패하고 파일을 찾을 수 없다는 메시지를 표시합니다. 왜?
#!/bin/bash
filename="images.txt"
while read -r line
do
echo "line is $line"
# width
width="$( identify -format "%w" "$line" )"
# height
height="$( identify -format "%h" "$line" )"
echo "$width X $height "
exit 1
if [ $width -lt 250 -a $height -lt 250 -a $width -lt $height ]
then
echo "1"
convert $line -resize 250 $line
elif [ $width -lt 250 -a $height -lt 250 -a $width -gt $height ]
then
echo "2"
convert $line -resize x250 $line
elif [ $width -lt 250 ]
then
echo "3"
convert $line -resize 250 $line
elif [ $height -lt 250 ]
then
echo "4"
convert $line -resize x250 $line
else
echo "All is Well"
fi
done < "$filename"
산출:
line is v/347/l_ib-dfran035__62594_zoom.jpg
': No such file or directory @ error/blob.c/OpenBlob/2589._zoom.jpg
답변1
오류 줄( ': No such file...
아님 )로 판단하면 줄이 CR-LF로 끝나는 파일(즉, Windows 세계에서) 'filename': No such file...
에 문제가 있을 수 있습니다 .images.txt
images.txt
따라서 line
변수(파일 이름)는 CR
(캐리지 리턴)으로 끝나는데 이는 잘못된 것입니다(해당 파일이 없습니다...). 또한 화면에 표시되면 CR
줄의 처음부터 인쇄가 계속되며 내장된 제어 문자로 인해 파일 이름을 덮어씁니다.
images.txt
해당 행이 LF로 끝나도록 형식을 변경하거나 ( dos2unix
예: 이 유틸리티 사용) bash에서 후행 CR을 필터링합니다.
[업데이트] Bash에서 CR을 필터링하도록 선택한 경우 다음 중 하나를 수행하는 것이 좋습니다.
read -r -d $'\r' line
- 또는 바로 다음 장소에서
read -r line
:line=${line%$'\r'}