Last active
October 2, 2023 17:04
-
-
Save scifinder/567c971d6a7ffa87c85301e6e3087ed0 to your computer and use it in GitHub Desktop.
Патчи для утилит find и cp во FreeBSD, реализующие полноценную работу с расширенными атрибутами
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Механизм расширенных атрибутов во FreeBSD (extattr) позволяет управлять дополнительной информацией, связанной с файлом или директорией. При помощи семейства команд setextattr, getextattr и rmextattr можно редактировать расширенные атрибуты файла, принадлежащие к двум пространствам имён: системному и пользовательскому. Редактирование пользовательских атрибутов может пригодиться для классификации файла: добавления описания, ключевых слов и других метаданных. Вот пример использования этих команд. | |
a) Установить атрибут: user - пользовательское пространство имён, keywords - название атрибута, далее значение и имя файла | |
$ setextattr user keywords forest,lake,stone 20190621.jpg | |
b) Прочесть значение атрибута | |
$ getextattr user keywords 20190621.jpg | |
20190621.jpg forest,lake,stone | |
Наиболее очевидный пример использования расширенных атрибутов - классификация файлов при помощи ключевых слов. Однако, механизм расширенных атрибутов во FreeBSD имеет ряд недоработок. В частности, расширенные атрибуты теряются при копировании файлов командой cp. Кроме того, утилита find не умеет осуществлять поиск файлов по их расширенным атрибутам. Без исправления этих недостатков теряет всякий смысл идея классификации и поиска файлов по ключевым словам или краткому описанию. | |
Для решения возникших препятствий я написал два патча - для утилит cp и find соответственно - исправляющих указанные недостатки. | |
a) Патч для утилиты find | |
Применить его можно так (во FreeBSD должны быть установлены исходники): | |
cd /usr/src/usr.bin/find | |
patch < /tmp/patch-find.diff | |
make | |
make install clean | |
А использовать так: | |
find . -userattr keywords=lake | |
./20190621.jpg | |
Эта команда найдёт все файлы, у которых атрибут "keywords" содержит подстроку "lake". | |
b) Патч для утилиты cp | |
Применяется аналогичным образом: | |
cd /usr/src/bin/cp | |
patch < /tmp/patch-cp.diff | |
make | |
make install clean | |
После его применения расширенные атрибуты будут по-умолчанию копироваться вместе с файлом. | |
Полный код утилит с моими изменениями размещён в репозиториях find и cp. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment