Inferno OS Wiki
Регистрация
Advertisement

ИМЯ

fs - просмотр файловой иерархии

РЕЗЮМЕ

fs команда аргументы

ОПИСАНИЕ

Fs вычисляет выражение, чьи значения представлют содержимое иерархической файловой системы. Существует шесть типов значений:

fs Полное содежимое файловой системы.

entries Информация о записях в файловой системе без их содержимого.

gate Логическое условие которое будет использовано в логическом выражениим команды. Гейт открыт для записей удовлетворяющих некоторому условию.

selector Компаратор который сравнивает две записи и выбирает одну, обе или никакую из них.

string Простая строковая константа, представленная сама по себе, либо заключенная в кавычки в соответствии с обычными правилами командного интерпретатора.

command Команда интерпретатора, представленная символом "@" и с последующим блоком команд интерпретатора заключенных в фигурные скобки.

void Без значения. Выражение этого типа не может быть использовано в качестве аргумента любой команды.


Значение представляется или как константа (строка или команда интерпретатора), или как блок в скобках, {команда [аргумент...]}, чье значение является результатом выполнения команды с указанными аргументами.

В следующем описании представленной команды entry, такой как:

print entries -> void

описывает команду print, которая принимает один аргумент типа entries, и результатом которой является тип void. Если тип не подходит ни под один из описанных, он должен быть строковым типом.

Если fs выполняется без аргументов, она напечатает список доступных команд. Команды которые понимает fs включают в себя:

and gate gate [gate...] -> gate And это гейт который открывает запись если все все аргументы открыты.

bundle fs -> void Bundle конвертирует fs в архивный формат и пишет его на стандартный вывод.

compose [-d] op -> selector Compose создает операторы "композитного/состовного"-типа, полезных в случае объединенных файловых систем. Op определяет оператор, беря имена из графического алгоритма Porter-Duff: AinB, AinB, BinA, AoutB, BoutA, A, AoverB, AatopB, AxorB, B, BoverA, or BatopA. Например, AinB дает пересечение множеств A и B; AatopB дает A если оба и A и B существуют, и B в противном случае. Когда используется как selector для объединения, операторы которые исключают объединение A и B не очень полезны, поскольку они исключают все общие директории верхнего уровня. Задание опции -d, позволяет compose проходить через директории которые в противном случае были бы исключены, делая операторы такие как AxorB (все А что не удовлетворяют равенства с B) более полезными, хотя правильно работает только с обычными файлами.

depth n -> gate Depth это гейт открытый только для записей которые нахотяся в пределах n уровня от корня файловой системы.

entries fs -> entries Entries выдает все записи содержащиеся в fs.

eval expr -> any Eval вычисляет fs выражение и возвражает его результат.

filter [-d]gate fs -> fs Результатом фильтра является файловая система из которой были удалены записи и их потомки не прошедшие гейт. Если был установлен флаг -d, будут фильтроваться только файлы, а директории продуйт через гейт.

ls [-um] entries -> void Напечатает каждую запись в стиле ls -l (смотри ls(1)). Если задан флаг -d, то вместо времени модификации файла будет напечатано время последнего доступа к файлу. Если задан флаг -m, будет также напечатано имя пользователя модифицировавшего файл.

exec [-pP] [-t command] [-n n] command entries -> void Запускает команду принимающую в качестве аргумента каждую запись из списка. Если указан флаг -n exec попытается собрать вместе n записей перед вызовом команды (по умолчанию - 1). Переменная окружения $file устанавливается в имена записей которые были собраны. Если задан флаг-p, переменным окружения присваивается информация о правах доступа, владельце, времени модификации и рамере записи (они называются аналогичными именами полей структуры Dir; смотри sys-stat(2)). Эта опция действует только в случае n равного 1. Флаг -P включает все другие поля из структуры Dir. Обратите внимание, что команда запускается каждый раз в том же самом контектсе интерпретатора, так что переменные окружения установленные для одного выполнения могут быть извлечены в следующий раз. Флаг -t может быть использован для указания команды которая будет выполнена перед завершением работы.

merge [-1] [-c selector] fs fs [fs...] -> fs Рекурсивное объединение содержимого файловых систем указанных как аргументы. Selector задает правила отбора записей, в случае если он не задан, записи отбираются из предпочтений первой фалойвой системы (аналогично {compose AoverB}). Если указан флаг -1, объединение осуществляется только у директорий верхнего уровня.

mode spec -> gate Mode это гейт который отбирает записи, чьи права удовлетворяют указанным, они записываются как строка в стиле chmod(1). если оператор поля является +, права должны быть представлены; если -, они должны отсутствовать, и если =, они должны в точности соответствовать заданным. Директории и режим аутентификации указываются символами ``d и ``A соответственно.

not gate -> gate Not это гейт открытый для записей НЕ аргументов.

or gate gate [gate...] -> gate Or это гейт открытый для записей если один из аргументов открыт.

path [-x] path... -> gate Path это гейт открытый для записи чей полный путь является предком или потомком любого пути. Если указан -x, то гейт открыт для любого пути за исключением заданного.

pipe [-1pP] command fs -> void Pipe похожа на exec, за исключением того, что содержимое всех файлов в fs пропускается через команду. Пока не задана опция -1, команда запускается один раз для каждого файла, с переменной $file содержащей имя файла, и другими переменными окружения установленными в соответствии с опциями -p или -P, как для exec. Если указана опция -1, команда выполняется всего один раз - все содержимое файлов пропускается через нее.

print entries -> void Печатает путь каждой записи.

proto [-r root] protofile -> fs Вычисляет protofile как прото-файл mkfs(8). Если указан корень, он будет использован как корень результуирующей fs.

query command -> gate Query это гейт который запускает команду для определения который из них открыт; пустой статус выхода команды считаеся окрытым гейтом. Пременная окружения $file устанавливается командой в путь к записи к которой произведено обращение.

run command -> string Run запускает команду и заменяет значение переменной окружения $s после ее вызова. $s должна быть точно лдним элементом.

select gate entries -> entries Select отбирает только те записи которые проходят через гейт. На потомков это не распространяется.

setroot [-c] path fs -> fs Setroot задает имя корневой директории fs. Если задан флаг -c, элементы корневой директории созданы явно в иерархии (например, имя верхней директории не будет содержать ни одного символа /).

size entries -> void Выводит суммарный размер всех записей в байтах.

unbundle file -> fs Unbundle читает архив созданный bundle из файла; его результатом будет содержимое оригинальной файловой системы помещенной в архив. Если файл является "-", считывается стандартный поток ввода.

walk path -> fs Walk производит файловую систему являющуюся результатом обхода всех файлов и каталогов ниже заданного пути.

write dir fs -> void Write записывает содержимое fs в файловую систему с корнем в dir. Если dir пуста, fs запишет корневую директорию первоначально ассоциированную с fs.

По соглашению, fs выполняет автоматическое преобразование типов (преобразования выполняются рекрсивно, так например, fs выражение верхнего уровня будет сконвертировано в void путем {print {entries fs}).

string->fs
Результат {walk string}.
fs->entries
Результат {entries fs}.
string->gate
Результат {match string}.
entries->void
Результат {print entries}.
command->string
Результат {run command}.

ПРИМЕРЫ

Печать размеров всех файлов в текущей директории и ниже:

fs size .

Показывает имена всех файлов x не являющиеся y:

fs select {mode -d} {merge -c {compose -d AoutB} x y}

Удаляет все файлы заканчивающиеся на .dis из /appl:

fs exec @{rm $file} {select *.dis /appl}

Рекурсивно копирует текущую директорию в /tmp/foo:

fs bundle . | fs write /tmp/foo {unbundle -}

Упрощенный случай предыдущего:

fs write /tmp/foo .

Интерактивно удаляет все обычные файлы одного уровня теукщей директории:

fs exec @{rm $file} {select {query
@{echo -n $file:; ~ `{read} y yes}}
{select {mode -d} {filter {depth 1} .}}}

Создает новый архив содержащий файлы ниже текущей директории которые хранились в старом архиве:

fs bundle {merge -c {compose AinB} . {unbundle old.bundle}} > new.bundle

ИСХОДНЫЙ ТЕКСТ

/appl/cmd/fs.b
/appl/cmd/fs/*.b
/appl/lib/fslib.b

СМОТРИ ТАКЖЕ

sh(1)
Advertisement