Skip to content

chujoii/xattr-tag

Repository files navigation

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/.

Keywords:

file search set xattr tag catalog indexer label

Description:

software package for easy creation and search tags xattr

Usage:

read with emacs (3__3) org mode

History:

Version 0.1 was created at 2012.february.03

Dependences:

guile (GNU Guile) 2.0.4 or later.

battery-scheme: https://github.com/chujoii/battery-scheme

intro (en)

Program features:

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.

Todo:

  • 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 …)

intro (ru)

article

Наверное перед каждым пользователем компьютера возникает вопрос размещения и поиска файлов.

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

Существует несколько вариантов решения:

  1. обычные каталоги +преимущество: переносимость -недостаток: иногда файл подходит сразу в несколько каталогов (трудно решить где его буду искать когда он потребуется особенно для документации по смежным вопросам) в этом случае может помочь система категорий типа mkdir “[tag1] [tag2]”, но есть ограничение на длину пути и выглядеть будет некрасиво например для архива http://rosettacode.org/wiki/Read_entire_file или http://pleac.sourceforge.net/
  2. система символических ссылок (например один каталог для файлов, и куча каталогов с ссылками на соответствующие файлы) +преимущество: ? -недостаток: необходимость создания ссылок; непереносимость
  3. теги (атрибуты, ярлыки) в виде комментариев к файлам (read.me, files.bbs, dirinfo, descript.ion) +преимущество: переносимость (ограниченная переносимость в Linux: нужно не забывать копировать вместе с файлом) -недостаток: в Linux не поддерживается работа с этими комментариями
  4. теги в базе данных +преимущества: хорошо работает в по умолчанию в одном из DE (например Gnome[Nautilus]) -недостаток: непереносимость между DE - если с одного компьютера на другой можно скопировать базу данных ~/.local/share/gvfs-metadata и там Gnome их увидит, но как заставить KDE воспринять эти теги не знаю
  5. теги в виде xattr +преимущество: работают в Beagle и Nepomuk -недостаток: ограниченная переносимость; необходимость задания тегов, не поддерживается (Meta)Tracker-ом
  6. ScrapBook(Firefox) +преимущество: если нет других файлов кроме ScrapBook-а то достаточно удобно -недостаток: будет два места хранения ScrapBook и файловая система (в место одной проблемы - две)
  7. файлы в базе данных DBFS +преимущество: удобно задавать теги -недостаток: непереносимость; отсутствуют вменяемые реализации
  8. поисковые системы и каталогизаторы: (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
  9. вообще не хранить файлы (есть google, yandex) +преимущество: не нужно никаких дополнительных действий -недостаток: свои файлы тоже нужно хранить; сайты исчезают или перемещаются; трудно снова сформулировать тот запрос (возмжно изначально неправильно сформулированный, но в итоге давший правильные страницы) и перерыть сотню ссылок

Program features:

K файлам вручную добавляются xattr теги, а также контрольные суммы рассчитанные автоматически. Эта информация дублируется в комментарии к файлу “file.ext.txt” в надежде на некоторую переносимость и возможность индексации Tracker-ом.

В данный момент можно создавать теги, добавлять к существующим тегам, осуществлять поиск тегов (причём путь и имя файла также являются тегами и участвуют в оценке рейтинга файла по данному запросу). Для всех команд в консоли (zsh) работает авто-дополнение, но нужно производить индексацию существующих тегов. При добавлении нового файла, его теги автоматически добавляются в индекс. При поиске найденные теги добавляются в индекс.

Todo (планы на будущее)

  • каталоги также могут иметь аттрибуты
  • чистка индексных файлов от неиспользуемых тегов
  • при поиске не отображать “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 …)

low level work with xattr

enable xattr (USE flag in make.conf)

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—————————-

set

setfattr -n user.foo -v bar hello.txt

list of extended attribute names

getfattr hello.txt

get

getfattr -n user.foo hello.txt

file: hello.txtuser.foo=”bar”

or:

getfattr -d hello.txt

remove

setfattr -x user.foo hello.txt

backup all extended attributes:

getfattr –dump * > data_file

restore all extended attributes

setfattr –restore=data_file

search

getfattr -R -e “text” -n user.metatag path/to/file/storage 2>&1 | grep ‘foo|bar|baz|qux’

xattr examples:

  • 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

particulars

programpossibilitycommentary
cp+(cp –preserve=xattr) or (cp –preserve=all) or set alias (alias cp=’nocorrect cp -iR –preserve=all’)
mv+
rsync+rsync –xattrs
mcnot work (version 4.8.1)
nautilus+
dolphinnot work (version 2.0 (KDE 4.8.0))

help

install

you need enable xattr in kernel and in filesystem

change config file (created after first use): ~/.config/xattr-tag/xattr-config.scm

#———————-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—————————-

change config file: ~/.zshrc

#———————-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—————————-

use:

set tag:

set-xattr-tag.scm path/to/test.txt tag1 tag2 tag3

adding tags (preserving the existing tag):

add-xattr-tag.scm path/to/test.txt tag1 tag2 tag3

find tag in path (with auto-completion):

find-xattr-tag.scm path/to/file/storage tag1 tag2 tag3

generate tag list for zsh completion (fixme: you need restart terminal for update completion):

generate-xattr-tag.scm path/to/file/storage

clean

you can remove files:

~/.cache/xattr-tag/list-xattr-tag.scm

~/.config/zsh/completion/_xattr-tag

~/.config/xattr-tag/xattr-config.scm

About

software package for easy creation and search tags xattr

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages