Сожалеем, но текст оригинала доступен только зарегистрированным пользователям. |
ИМЯ fs - просмотр файловой иерархии
rapidfx
24.05.09 в 13:00
|
|
РЕЗЮМЕ fs команда аргументы
rapidfx
24.05.09 в 13:01
|
|
ОПИСАНИЕ Fs вычисляет выражение чьи значения представлют содержимое иерархической файловой системы. Существует шесть типов значений:
rapidfx
24.05.09 в 13:02
|
|
fs Полное содежимое файловой системы. entries Информация о записях в файловой системе без их содержимого. gate Логическое условие которое будет использовано в логическом выражениим команды. Гейт открыт для записей удовлетворяющих некоторому условию. selector Компаратор который сравнивает две записи и выбирает одну, обе или никакую из них. string Простая строковая константа, представленная сама по себе, либо заключенная в кавычки в соответствии с обычными правилами командного интерпретатора. command Команда интерпретатора, представленная символом "@" и с последующим блоком команд интерпретатора заключенных в фигурные скобки. void Без значения. Выражение этого типа не может быть использовано в качестве аргумента любой команды.
rapidfx
25.05.09 в 06:54
|
|
Значение представляется или как константа (строка или команда интерпретатора), или как блок в скобках, {команда [аргумент...]}, чье значение является результатом выполнения команды с указанными аргументами.
rapidfx
25.05.09 в 06:58
|
|
В следующем описании представленной команды entry, такой как:
rapidfx
25.05.09 в 07:01
|
|
print entries -> void
rapidfx
25.05.09 в 07:01
|
|
описывает команду print, которая принимает один аргумент типа entries, и результатом которой является тип void. Если тип не подходит ни под один из описанных, он должен быть строковым типом.
rapidfx
25.05.09 в 07:04
|
|
Если fs выполняется без аргументов, она напечатает список доступных команд. Команды которые понимает fs включают в себя:
rapidfx
25.05.09 в 07:07
|
|
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 может быть использован для указания команды которая будет выполнена перед завершением работы.
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
Evaluate protofile as a mkfs(8) proto file. If root is specified, it will be used as the root of the resulting fs.
Вычисляет protofile как прото-файл mkfs(8). Если указан корень, он будет использован как корень результуирующей fs.
query command -> gate
Query это гейт который запускает команду для определения который из них открыт; пустой статус выхода команды считаеся окрытым гейтом. Пременная окружения $file устанавливается командой в путь к записи к которой произведено обращение.
run command -> string
Run runs command and substitutes the value of the environment variable $s after its invocation. $s must have exactly one element.
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.
rapidfx
25.05.09 в 07:11
|
|
По соглашению, fs выполняет автоматическое преобразование типов (преобразования выполняются рекрсивно, так например, fs выражение верхнего уровня будет сконвертировано в void путем {print {entries fs}).
rapidfx
26.05.09 в 08:27
|
|
string->fs Результат {walk string}. fs->entries Результат {entries fs}. string->gate Результат {match string}. entries->void Результат {print entries}. command->string Результат {run command}.
rapidfx
26.05.09 в 08:32
|
|
ПРИМЕРЫ Печать размеров всех файлов в текущей директории и ниже:
rapidfx
25.05.09 в 19:13
|
|
|
|
|
Показывает имена всех файлов x не являющиеся y:
rapidfx
26.05.09 в 09:26
|
|
fs select {mode -d} {merge -c {compose -d AoutB} x y}
rapidfx
26.05.09 в 09:27
|
|
Удаляет все файлы заканчивающиеся на .dis из /appl:
rapidfx
26.05.09 в 09:27
|
|
fs exec @{rm $file} {select *.dis /appl}
rapidfx
26.05.09 в 09:27
|
|
Рекурсивно копирует текущую директорию в /tmp/foo:
rapidfx
26.05.09 в 09:28
|
|
fs bundle . | fs write /tmp/foo {unbundle -}
rapidfx
26.05.09 в 09:28
|
|
Упрощенный случай предыдущего:
rapidfx
26.05.09 в 09:29
|
|
fs write /tmp/foo .
rapidfx
26.05.09 в 09:29
|
|
Интерактивно удаляет все обычные файлы одного уровня теукщей директории:
rapidfx
26.05.09 в 09:29
|
|
fs exec @{rm $file} {select {query @{echo -n $file:; ~ {read} y yes}} {select {mode -d} {filter {depth 1} .}}}
rapidfx
26.05.09 в 09:30
|
|
Создает новый архив содержащий файлы ниже текущей директории которые хранились в старом архиве:
rapidfx
26.05.09 в 09:31
|
|
fs bundle {merge -c {compose AinB} . {unbundle old.bundle}} > new.bundle
rapidfx
26.05.09 в 09:31
|
|
ИСХОДНЫЕ ФАЙЛЫ /appl/cmd/fs.b /appl/cmd/fs/*.b /appl/lib/fslib.b
rapidfx
24.05.09 в 13:03
|
|
СМОТРИ ТАКЖЕ sh(1)
rapidfx
24.05.09 в 13:03
|
|