VFS - это модуль?

Можно надеяться, что

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 , чтобы показать имена измененных файлов.

Команда является одной строкой технически (показана с линиями продолжения, чтобы избежать прокрутки).
И, после этого объяснения, как-то я чувствую, что линия все еще не легко читать ...

0
01.09.2015, 03:06
2 ответа

Вы не указываете, о какой операционной системе вы спрашиваете , но ответ, скорее всего, будет одинаковым для всех основных универсальных устройств.

TL; DR : VFS не является модулем.

В общем, VFS слишком тесно связана с основными функциями ядра, чтобы ее можно было настроить как (необязательный) модуль. Все, что связано с файлами, путями, точками монтирования и файловыми системами, в основном подключено к VFS. Каждый системный вызов, который принимает путь или дескриптор файла, от open () до rename () до execve () подключается к VFS. Без этого последнего вы не можете, ну ... запускать любое программное обеспечение.

Есть операционные системы, в которых нет VFS или где VFS является необязательным компонентом, но тогда в этих операционных системах нет концепции файлов с именами. Подумайте о микроконтроллерах как об «операционной системе» вашего цифрового термостата.

3
28.01.2020, 02:17

Вкл. Solaris (обратите внимание, что VFS была изобретена Sun SunOS-3.x в середине 1980-х) все возможное динамически загружается в ядро ​​.... с 1992 года. Однако VFS статически связана с / ядро ​​/ genunix . Даже krtld компоновщик времени выполнения ядра загружен, но genunix должен иметь возможность смонтировать корневую файловую систему в качестве одной из первых операций, поэтому нет возможности сделать это загружаемым.

2
28.01.2020, 02:17

Теги

Похожие вопросы