이미지 디렉토리가 있습니다 jpg
. 모든 가로 이미지를 하나의 디렉토리로 이동하고 모든 세로 이미지를 다른 디렉토리로 이동하는 쉘 스크립트가 있습니까( bash
또는 zsh
허용됩니까)?
답변1
비율 확인과 같이 높이와 너비를 비교하기 위해 특수 연산자 와 함께 imagemagick
s를 사용할 수 있습니다 .identify
fx
h/w
for f in ./*.jpg
do
r=$(identify -format '%[fx:(h/w)]' "$f")
if (( r > 1 ))
then
mv "$f" /path/to/portraits
elif (( r < 1 ))
then
mv "$f" /path/to/landscapes
fi
done
# mv ./*.jpg /path/to/squares
이렇게 하면 현재 디렉터리에 정사각형 이미지가 유지됩니다. 마지막 줄의 주석 처리를 해제하여 해당 디렉터리로 이동하세요. 또는 가로 또는 세로 방향으로 포함하려면 비교 연산자 중 하나를 <=
또는 로 변경하세요 >=
.
답변2
ImageMagick 사용 identify
:
#! /bin/sh
identify -format '%w %h %i\n' -- "$@" 2>/dev/null | \
while read W H FN; do
if [ $W -gt $H ]; then
echo mv -f -- "$FN" /path/to/landscape/
else
echo mv -f -- "$FN" /path/to/portraits/
fi
done
이는 mv
파일 단위로 실행되므로 특별히 효율적이지는 않지만 효율성을 요구하지는 않습니다.
답변3
유틸리티를 사용하여 fileinfo
이미지의 너비와 높이를 가져옵니다. 높이가 너비보다 크면 파일이 portraits/
디렉터리로 이동됩니다. 그렇지 않은 경우 해당 landscape/
디렉터리로 이동합니다.
for f in ./*jpg
do
if fileinfo "$f" 2>&1 | awk '/w =/{w=$3+0; h=$6+0; if (h>w) exit; else exit 1}'
then
mv "$f" portraits/
else
mv "$f" landscape/
fi
done
이 루프의 파일 이름은 필요할 때 큰따옴표로 묶여 있으므로 공백, 줄 바꿈 또는 기타 어려운 문자가 포함된 이미지 파일 이름에도 이 루프를 사용하는 것이 안전합니다.
Debian 계열 시스템에서는 다음을 fileinfo
통해 설치할 수 있습니다.
apt-get install leptonica-progs
awk 명령을 적절하게 수정하는 한 다른 유사한 유틸리티를 사용할 수 있습니다.
답변4
다른 해결 방법에서 산술 오류가 발생하는 경우 이 해결 방법을 시도해 보십시오.
#/bin/zsh
mkdir -p portraits
mkdir -p landscapes
for f in ./*.jpg
do
r=$(identify -format '%[fx:(h/w)]' "$f")
if [[ r < 1.0 ]]
then
echo "Portrait detected."
mv "$f" ./portraits/
elif [[ r > 1.0 ]]
then
echo "Landscape detected."
mv "$f" ./landscapes/
fi
done