노력하고있어:
- 내 이미지 형식을 변경하고,
- 그런 다음 높이와 너비를 40%로 조정합니다.
- 그런 다음 품질은 소스의 최대 35%로 최적화되고, 이미지의 전체 크기는 소스의 최대 35%로 최적화됩니다.
이것은 내 코드입니다.
find . -name '*.png' -exec mogrify -format jpg {} + &&
find . -name '*.{jpeg,jpg}' -exec convert -resize 40% _resized.jpg {} + &&
find ./*.{jpeg,jpg} -exec jpegoptim -m 35% --size=35% {} \;
크기 조정 - 2번째 줄 - 실패한 것 같습니다. 이미지 속성을 보면 동일한 이미지 크기를 얻습니다.
새 이미지의 크기를 조정하고 싶습니다. - 원래 이름 + 이름 끝에 "Resize"라는 단어가 있어야 합니다.
답변1
두 번째 명령의 주요 문제점은 find
중괄호 확장을 이해하지 못하여 {jpeg,jpg}
이를 리터럴 문자열로 처리한다는 것입니다. 두 번째 문제는 {} +
매개변수 형식을 사용하여 여러 파일을 convert
.
참고: echo
아래 명령이 올바른 작업을 수행한다고 만족하는 경우에만 삭제하십시오.
아마도 당신이 원하는 것은 다음과 같습니다.
find . \( -name '*.jpeg' -o -name '*.jpg' \) -exec sh -c '
for f; do
ext="${f##*.}"; echo convert -resize 40% "$f" "${f%.*}_resized.$ext"
done
' find-sh {} +
\(
... 바인딩 비율이 더 강하기 때문에 괄호가 \)
필요합니다 . 해당 파일이 없으면 일치하는 파일을 찾을 수 있지만 변환되지는 않습니다.-exec
-o
-name '*.jpeg'
출력 파일 이름이 그다지 까다롭지 않다면 위의 내용을 다음과 같이 단순화할 수 있습니다.
find . \( -name '*.jpeg' -o -name '*.jpg' \) -exec sh -c '
for f; do
echo convert -resize 40% "$f" "${f%.*}_resized.jpg"
done
' find-sh {} +
.jpg
(원본 파일의 확장자가 있어도 출력 파일은 확장자로 생성됩니다 .jpeg
.)
find . \( -name '*.jpeg' -o -name '*.jpg' \) -exec sh -c '
for f; do
echo convert -resize 40% "$f" "${f}_resized.jpg"
done
' find-sh {} +
(이렇게 하면 유사한 출력 파일이 생성됩니다 foo.jpeg_resized.jpg
).
효율성에도 관심이 없다면 찾은 각 파일에 대해 셸 호출을 수행하고 셸 루프를 취소할 수 있습니다.
find . \( -name '*.jpeg' -o -name '*.jpg' \) -exec sh -c '
echo convert -resize 40% "$1" "${1}_resized.jpg"
' find-sh {} \;
세 번째 명령에서 참고하세요.
find ./*.{jpeg,jpg} -exec jpegoptim -m 35% --size=35% {} \;
당신의껍데기인용되지 않은 를 확장하는 것이 가능 {jpeg,jpg}
하지만 그것은 당신이 원하는 것이 아닙니다. 다시 말하지만, 이것은 다음과 같아야 합니다.
find . \( -name '*.jpeg' -o -name '*.jpg' \) -exec jpegoptim -m 35% --size=35% {} \;
답변2
제가 올바르게 이해했다면 도움이 되었는지 알려주시기 바랍니다.
find . -name "*.jpeg" -o -name "*.jpg" -exec bash -c 'convert -resize 40% "{}" "{}"_resized.jpg' \;