README.org — description
Copyright (C) 2012 Roman V. Prikhodchenko
Author: Roman V. Prikhodchenko <chujoii@gmail.com>
This file is part of xattr-tag.
xattr-tag is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
xattr-tag is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with xattr-tag. If not, see http://www.gnu.org/licenses/.
file search set xattr tag catalog indexer label
software package for easy creation and search tags xattr
read with emacs (3__3) org mode
Version 0.1 was created at 2012.february.03
guile (GNU Guile) 2.0.4 or later.
battery-scheme: https://github.com/chujoii/battery-scheme
User adds xattr tags to the files. Checksums are automatically added. This information is duplicated in the comments to the file “file.ext.txt”. At this version, you can create tags, add to existing tags, search for tags (and the path and file name are also tagged). For all the commands in the console (zsh) work completion, but you need to make the indexing already created tags. When adding a new file, its tags are automatically added to the index. When searching, found tags are added to the index.
- directories can also have attributes
- cleaning unused tags in index
- search should not display “file.ext.txt” if file “file.ext” exist
- create a database for files and tags for fast search and ability to recovery of tag
- tags recovery (message about difference) for files do not match checksum or do not match xattr and “file.ext.txt”
- use EXIF, index.dat (ScrapBook), index.rdf (maff) and other metadata from the file contents
- graphical (GTK3) and libastral interface
- transformation into a dragon: the grandeur and gluttony
- many forks, including the C, C++ (Qt5), Python, Ruby and other
- sometimes “getfattr … 2>&1” generate strange output
verbatim
user.metatag/foo/bar/Schottky_diode.maff.txt: user.metatag: No such attribute /foo/bar/1N5819-schottky.pdf.txt: user.metatag: No such attribute /foo/bar/dc-motor: user.metatag: No such attribute =”hot carrier diode schottky”
verbatim
real: (user.metatag … many symbols … =”hot carrier diode”) need: (user.metatag=”hot carrier diode” … many lines … )
verbatim
/foo/bar/net-misc: user.metatag: No such attribute
/foo/bar/Zsh_-_Gentoo_Linux_Wiki.maff.txt: user.metatag: No such attribute
ff
user.metatag=”pwm control speed instruction
verbatim
real: (/foo/bar/Драйвер_двигателя_L293B.ma/home … many symbols … ff user.metatag=”pwm control)
need: (/foo/bar/Драйвер_двигателя_L293B.maff user.metatag=”pwm control … many lines …)
Наверное перед каждым пользователем компьютера возникает вопрос размещения и поиска файлов.
https://www.linux.org.ru/forum/talks/5986039 https://www.linux.org.ru/forum/talks/6681085 https://www.linux.org.ru/forum/talks/1912277 https://www.linux.org.ru/forum/desktop/5763899 https://www.linux.org.ru/forum/talks/4947376
Существует несколько вариантов решения:
- обычные каталоги +преимущество: переносимость -недостаток: иногда файл подходит сразу в несколько каталогов (трудно решить где его буду искать когда он потребуется особенно для документации по смежным вопросам) в этом случае может помочь система категорий типа mkdir “[tag1] [tag2]”, но есть ограничение на длину пути и выглядеть будет некрасиво например для архива http://rosettacode.org/wiki/Read_entire_file или http://pleac.sourceforge.net/
- система символических ссылок (например один каталог для файлов, и куча каталогов с ссылками на соответствующие файлы) +преимущество: ? -недостаток: необходимость создания ссылок; непереносимость
- теги (атрибуты, ярлыки) в виде комментариев к файлам (read.me, files.bbs, dirinfo, descript.ion) +преимущество: переносимость (ограниченная переносимость в Linux: нужно не забывать копировать вместе с файлом) -недостаток: в Linux не поддерживается работа с этими комментариями
- теги в базе данных +преимущества: хорошо работает в по умолчанию в одном из DE (например Gnome[Nautilus]) -недостаток: непереносимость между DE - если с одного компьютера на другой можно скопировать базу данных ~/.local/share/gvfs-metadata и там Gnome их увидит, но как заставить KDE воспринять эти теги не знаю
- теги в виде xattr +преимущество: работают в Beagle и Nepomuk -недостаток: ограниченная переносимость; необходимость задания тегов, не поддерживается (Meta)Tracker-ом
- ScrapBook(Firefox) +преимущество: если нет других файлов кроме ScrapBook-а то достаточно удобно -недостаток: будет два места хранения ScrapBook и файловая система (в место одной проблемы - две)
- файлы в базе данных DBFS +преимущество: удобно задавать теги -недостаток: непереносимость; отсутствуют вменяемые реализации
- поисковые системы и каталогизаторы: (Meta)Tracker, Nepomuk, Beagle (заброшен), … +преимущество: не нужно никаких дополнительных действий, хотя можно вручную добавлять теги к файлам (у этих тегов с переносимостью не очень) -недостаток: индексирует мало типов файлов (tracker например не индексирует .zip [.maff]); тормоза при индексации - tracker мучает винчестер вообще всегда после загрузки в течении нескольких часов (initial crawling http://www.mail-archive.com/tracker-list@gnome.org/msg04737.html); Nepomuk не сочетается с Gnome , Beagle вроде бы всё хорошо но заброшен и mono
- вообще не хранить файлы (есть google, yandex) +преимущество: не нужно никаких дополнительных действий -недостаток: свои файлы тоже нужно хранить; сайты исчезают или перемещаются; трудно снова сформулировать тот запрос (возмжно изначально неправильно сформулированный, но в итоге давший правильные страницы) и перерыть сотню ссылок
K файлам вручную добавляются xattr теги, а также контрольные суммы рассчитанные автоматически. Эта информация дублируется в комментарии к файлу “file.ext.txt” в надежде на некоторую переносимость и возможность индексации Tracker-ом.
В данный момент можно создавать теги, добавлять к существующим тегам, осуществлять поиск тегов (причём путь и имя файла также являются тегами и участвуют в оценке рейтинга файла по данному запросу). Для всех команд в консоли (zsh) работает авто-дополнение, но нужно производить индексацию существующих тегов. При добавлении нового файла, его теги автоматически добавляются в индекс. При поиске найденные теги добавляются в индекс.
- каталоги также могут иметь аттрибуты
- чистка индексных файлов от неиспользуемых тегов
- при поиске не отображать “file.ext.txt” если есть файл “file.ext”
- создать базу данных с файлами и тегами для реактивного поиска и возможности восстановления тегов
- восстановление тегов (сообщение о различиях) при несовпадении xattr и “file.ext.txt” или несовпадении контрольных сумм
- использование EXIF, index.dat (ScrapBook), index.rdf (maff) и прочей мета-информации из содержимого файлов
- графический (GTK3) и libastral интерфейс
- превращение в дракона: величие и прожорливость
- многочисленные форки, в том числе на C, C++ (Qt5), Python, Ruby and other
- иногда “getfattr … 2>&1” генерирует странный текст
verbatim
user.metatag/foo/bar/Schottky_diode.maff.txt: user.metatag: No such attribute /foo/bar/1N5819-schottky.pdf.txt: user.metatag: No such attribute /foo/bar/dc-motor: user.metatag: No such attribute =”hot carrier diode schottky”
verbatim
real: (user.metatag … many symbols … =”hot carrier diode”) need: (user.metatag=”hot carrier diode” … many symbols … )
verbatim
/foo/bar/net-misc: user.metatag: No such attribute
/foo/bar/Zsh_-_Gentoo_Linux_Wiki.maff.txt: user.metatag: No such attribute
ff
user.metatag=”pwm control speed instruction
verbatim
real: (/foo/bar/Драйвер_двигателя_L293B.ma/home … many symbols … ff user.metatag=”pwm control) need: (/foo/bar/Драйвер_двигателя_L293B.maff user.metatag=”pwm control … many symbols …)
set enable xattr for you file system in usr/src/linux.config
#———————-8<—————————-
CONFIG_EXT3_FS_XATTR=y
CONFIG_EXT4_FS_XATTR=y
#———————->8—————————-
sudo mount -o remount,user_xattr
or
permanently enable by editing /etc/fstab :
#———————-8<—————————-
/dev/sda4 /home ext4 relatime,user_xattr 0 2
#———————->8—————————-
setfattr -n user.foo -v bar hello.txt
getfattr hello.txt
getfattr -n user.foo hello.txt
file: hello.txtuser.foo=”bar”
or:
getfattr -d hello.txt
setfattr -x user.foo hello.txt
getfattr –dump * > data_file
setfattr –restore=data_file
getfattr -R -e “text” -n user.metatag path/to/file/storage 2>&1 | grep ‘foo|bar|baz|qux’
- user.checksum.md5
- user.checksum.sha1
- user.checksum.sha256
- user.original_author
- user.application
- user.project
- user.comment
- user.icon.svg
- user.icon.png.32
- user.tag (T_T) already used by another program: user.tag.artist, user.tag.title
- user.metatag
program | possibility | commentary |
---|---|---|
cp | + | (cp –preserve=xattr) or (cp –preserve=all) or set alias (alias cp=’nocorrect cp -iR –preserve=all’) |
mv | + | |
rsync | + | rsync –xattrs |
mc | – | not work (version 4.8.1) |
nautilus | + | |
dolphin | – | not work (version 2.0 (KDE 4.8.0)) |
you need enable xattr in kernel and in filesystem
#———————-8<—————————-
(define xattr-file-extension “.txt”)
(define zsh-completion-file (string-append user-home-dir “/.config/zsh/completion/_xattr-tag”))
(define list-xattr-tag-file (string-append user-home-dir “/.cache/xattr-tag/list-xattr-tag.scm”))
#———————->8—————————-
#———————-8<—————————-
PATH=”$HOME/bin/xattr-tag:$PATH”
#
fpath=($fpath ~/.config/zsh/completion)
for func in $^fpath/*(N-.x:t); autoload $func
autoload -U compinit
compinit
zstyle ‘:completion:*’ menu select=2
#———————->8—————————-
set-xattr-tag.scm path/to/test.txt tag1 tag2 tag3
add-xattr-tag.scm path/to/test.txt tag1 tag2 tag3
find-xattr-tag.scm path/to/file/storage tag1 tag2 tag3
generate-xattr-tag.scm path/to/file/storage
you can remove files:
~/.cache/xattr-tag/list-xattr-tag.scm
~/.config/zsh/completion/_xattr-tag
~/.config/xattr-tag/xattr-config.scm