Можно надеяться, что
convert in.jpg -resize "448x336!" out.jpg
не касается файла, если размер уже правильно?
Неучебно не - но думая о том, как работает формат imageMagic командной строки, что неудивительно.
Итак, измерения изображения каждого файла должны быть проверены в первую очередь.
Теперь мы хотим использовать ImageAmagic, которая имеет команду для этой цели
;
identify -format "%wx%h\n" file.jpg
показывает только размер в формате wxh
, как 448x336
.
Мы хотим изменять размер, если размер не 448x336
. В этом случае мы используем Convert
, чтобы изменить размер 448x336
- мы должны сообщить Convert
, что мы хотим изменять изменение изменений, даже если это означает изменение соотношения сторон в силу Изображение к новым габаритам - мы делаем это, добавив !
Как вариант / флаг в спецификации размера:
convert in.jpg -resize "448x336!" out.jpg
Размеры нам нужны. Но у нас нет фиксированного имени файла для вывода. Давайте возьмем исходное имя и вставьте -RES
-RES
до .jpg
.jpg . In-res.jpg
:
convert in.jpg -resize "448x336!" -set filename:path "%d/%t-res.%e" "%[filename:path]"
Используем команду
Проверять каталоги за « .jpg изображения - или" .jpg ".
Определите деталь
, выполняются в оболочке для использования команды
, [...]
.
Я также использую оболочку для команды Convert
, которая работает, если первая -Exec
действие (не вариант) вспомнил. В этом случае это только для того, чтобы запустить вторую команду после размера, показывая сообщение для каждого файла изменений.
find . -type f -iname "*.jpg" -exec bash -c \
'[ $(identify -format "%wx%h\n" "{}") != 448x336 ]' \; -exec bash -c \
'convert "{}" -resize "448x336!" -set filename:path "%d/%t-res.%e" \
"%[filename:path]" ; echo "Resized {}"' \;
Вместо второго Bash
, можно использовать простыню -Exec Convert ...
, и добавить новое действие, вроде -Print
или -Ls
, чтобы показать имена измененных файлов.
Команда является одной строкой технически (показана с линиями продолжения, чтобы избежать прокрутки).
И, после этого объяснения, как-то я чувствую, что линия все еще не легко читать ...
Вы не указываете, о какой операционной системе вы спрашиваете , но ответ, скорее всего, будет одинаковым для всех основных универсальных устройств.
TL; DR : VFS не является модулем.
В общем, VFS слишком тесно связана с основными функциями ядра, чтобы ее можно было настроить как (необязательный) модуль. Все, что связано с файлами, путями, точками монтирования и файловыми системами, в основном подключено к VFS. Каждый системный вызов, который принимает путь или дескриптор файла, от open ()
до rename ()
до execve ()
подключается к VFS. Без этого последнего вы не можете, ну ... запускать любое программное обеспечение.
Есть операционные системы, в которых нет VFS или где VFS является необязательным компонентом, но тогда в этих операционных системах нет концепции файлов с именами. Подумайте о микроконтроллерах как об «операционной системе» вашего цифрового термостата.
Вкл. Solaris (обратите внимание, что VFS была изобретена Sun SunOS-3.x в середине 1980-х) все возможное динамически загружается в ядро .... с 1992 года. Однако VFS статически связана с / ядро / genunix
. Даже krtld
компоновщик времени выполнения ядра загружен, но genunix должен иметь возможность смонтировать корневую файловую систему в качестве одной из первых операций, поэтому нет возможности сделать это загружаемым.