Я разработал этот простой скрипт bash:

#!/bin/bash


for img in `find ./to_upload -iname "*.jpg" -type f`
do
    mogrify ‑resize 1024 ‑sample 70 ${img}
done

Когда я запускаю его, скрипт возвращает:

...
mogrify: unable to open image `‑resize': No such file or directory @ error/blob.c/OpenBlob/2658.
mogrify: no decode delegate for this image format `' @ error/constitute.c/ReadImage/501.
mogrify: unable to open image `1024': No such file or directory @ error/blob.c/OpenBlob/2658.
mogrify: no decode delegate for this image format `' @ error/constitute.c/ReadImage/501.
mogrify: unable to open image `‑sample': No such file or directory @ error/blob.c/OpenBlob/2658.
mogrify: no decode delegate for this image format `' @ error/constitute.c/ReadImage/501.
mogrify: unable to open image `70': No such file or directory @ error/blob.c/OpenBlob/2658.
mogrify: no decode delegate for this image format `' @ error/constitute.c/ReadImage/501.
...

для каждого файла. Что случилось? Я использую тестирование Debian.

Это не сценарий:

$ mogrify ‑resize 1024 ‑sample 70 image.jpg
mogrify: unable to open image `‑resize': No such file or directory @ error/blob.c/OpenBlob/2658.
mogrify: no decode delegate for this image format `' @ error/constitute.c/ReadImage/501.
mogrify: unable to open image `1024': No such file or directory @ error/blob.c/OpenBlob/2658.
mogrify: no decode delegate for this image format `' @ error/constitute.c/ReadImage/501.
mogrify: unable to open image `‑sample': No such file or directory @ error/blob.c/OpenBlob/2658.
mogrify: no decode delegate for this image format `' @ error/constitute.c/ReadImage/501.
mogrify: unable to open image `70': No such file or directory @ error/blob.c/OpenBlob/2658.
mogrify: no decode delegate for this image format `' @ error/constitute.c/ReadImage/501.

Я использую терминал GNOME. Я не понимаю, может быть, это ошибка Debian?

mogrify -resize 1024 -sample 70 image.jpg

mogrify ‑resize 1024 ‑sample 70 image.jpg

Я решил, но я не понимаю, почему, первая строка работает, но вторая строка не работает. Пожалуйста, кто-нибудь может попробовать (копировать-вставить в командной строке)?

3 ответа3

1

Я подозреваю, что проблема в том, что вы скопировали и вставили команду в Microsoft Word (или некоторый аналогичный текстовый процессор), а затем скопировали и вставили ее обратно в терминал.  В вашем

mogrify ‑resize 1024 …

команда, символ перед resize является символом Unicode U+2011, который является неразрывным дефисом (см. таблицу Unicode).  Попробуйте перепечатать его как обычный штрих (он же минус).

0

Я предполагаю, что у вас есть имена файлов с пробелами. Используйте цикл for для итерации по словам, while read цикл while для итерации по строкам

find ./to_upload -iname "*.jpg" -type f -print0 |
while IFS= read -r -d "" img; do
    mogrify ‑resize 1024 ‑sample 70 "$img"
done

Также крайне важно использовать двойные кавычки вокруг имени переменной.

0
find ./to_upload -iname "*.jpg" -type f -exec mogrify ‑resize 1024 ‑sample 70 {} \;

Обратите внимание на странные \; в конце - ';' является частью синтаксиса опции -exec для find, поэтому перед ним должен стоять префикс «\», чтобы избежать интерпретации оболочкой. Он сообщает find для вызова подкоманды ровно один раз для каждого найденного файла.

Вы также можете сделать это, если mogrify принимает несколько файлов за вызов (find также гарантирует, что он не превышает максимальное количество аргументов, разрешенных оболочкой):

find ./to_upload -iname "*.jpg" -type f -exec mogrify ‑resize 1024 ‑sample 70 {} +

PS Я только что заметил ваш комментарий "это не сценарий" - у меня есть ImageMagick на Cygwin, и он отлично работает, используя формы, которые вы показали. Попробуйте использовать двойные тире, возможно?

PSS ахах я нашел проблему! Я скопировал ваши две строки и проверил коды ascii и обнаружил, что символ '-' (тире, дефис) во второй строке не является стандартным символом ascii, это символ Unicode, вероятно, потому что скрипт был скопирован из текстового процессора, который часто переводит дефисы или кавычки в специальные символы, которые выглядят лучше, но не работают ни на одном языке программирования (о котором я знаю)

PSSS Тогда я обнаружил, что G-Man уже заметил это, черт!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .