67

Я искал способ пометить мои файлы и искать / фильтровать их на основе этих тегов.

Вот мои (обновленные) требования:

  • любой файл, читаемый пользователем, может быть помечен свободно
  • пользователь может искать файлы, соответствующие одному или нескольким тегам
  • файлы можно перемещать, не теряя ранее связанные теги
  • система может быть легко скопирована
  • не зависит ни от какой среды рабочего стола
  • если задействован какой-либо графический интерфейс, должен быть запасной вариант

Я надеялся на некоторую базовую хакерскую работу с файловой системой и coreutils, но я еще не думал об этом достаточно сложно.
А пока я расскажу о бигле и метатрекере, которые упоминались здесь, и посмотрю, как они работают.


Итак, у beagle огромные зависимости от gnome, и трекер в порядке, но все же есть некоторые зависимости, которые мне не нравятся ...

Занимался дополнительными исследованиями, и путь вполне мог бы быть расширенным атрибутом файла.
Это нативное решение для большинства современных файловых систем, но они пока не очень хорошо поддерживаются (большинство coreutils уничтожает их по умолчанию, например, для cp требуется флаг -a, чтобы сохранить их). Хотелось бы услышать некоторые мысли об их использовании, пока я сам пробую свои силы в хакерских атаках, хотя это может оправдать новый вопрос.

13 ответов13

21

Я только что выпустил альфа-версию своей новой программы, которая пытается обеспечить эту функциональность. В настоящее время он соответствует некоторым, но не всем вашим требованиям. В любом случае это может вас заинтересовать. Он предоставляет инструмент командной строки для тегирования и виртуальную файловую систему для просмотра (где теги представлены каталогами).

http://www.tmsu.org/

любой файл, читаемый пользователем, может быть помечен свободно

Да.

пользователь может искать файлы, соответствующие одному или нескольким тегам

Да. Либо с помощью инструмента командной строки, либо путем просмотра каталогов тегов в виртуальной файловой системе.

файлы можно перемещать, не теряя ранее связанные теги

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

система может быть легко скопирована

Да. Это простой файл базы данных Sqlite 3.

не зависит ни от какой среды рабочего стола

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

если задействован какой-либо графический интерфейс, должен быть запасной вариант

В настоящее время нет графического интерфейса.

12

Не ясно, какой поиск вы хотите. Если вы хотите, чтобы он работал где-нибудь в Unix, а не только в вашем домашнем каталоге, и вы хотите выполнять поиск только по путям, следующая схема работоспособна, с небольшим количеством хакерских атак на оболочку и использованием стандартного расположенного locatedb:

  1. Каждый каталог, который содержит по крайней мере один файл с тегами, нуждается в стандартном подкаталоге, скажем .path-tags ;
  2. Каждый файл в каталоге $ FILE со ссылкой $ TAG (которая не должна содержать символ _) имеет ссылку $TAG_$FILE -> ../$FILE

Я оставляю вам детали скрипта locate-tag ; он должен быть с двумя или тремя строками, используя только команду locate и хакерскую оболочку. (Если вам интересно, я мог бы написать один).

Некоторые главы KDE говорили о такой схеме метаданных, хотя я не помню подробностей.

Также должна быть возможность делать более сложные, проверяющие контент тесты на основе этой схемы с похожим сценарием, обернутым вокруг find .

Мысли об обновленных требованиях

  1. любой файл, читаемый пользователем, может быть помечен свободно - да, проблем не должно быть
  2. пользователь может искать файлы, соответствующие одному или нескольким тегам - аналогично
  3. файлы можно перемещать без потери ранее связанных тегов - каталоги, в которых они находятся, можно свободно перемещать, но если файл перемещается из каталога, у нас возникают проблемы. Если теги приняли форму $TAG_$INODE_$FILE и у нас есть эффективный способ определить, какие пути имеют заданный индекс, тогда мы можем сделать это, потеряв теги только в том случае, если мы выходим из файловых систем. Копирование файлов может создать некоторые проблемы, и это явно сложнее, чем мое первоначальное предложение.
  4. резервное копирование системы может быть легко - не сложно.
  5. нет зависимости от любой среды рабочего стола - нет
  6. если задействован какой-либо графический интерфейс, должен быть запасной вариант - вот где мы живем!

Постскриптум Файл «обратный поиск по иноду», описанный ссылкой (2), которую вы показали мне в своем ответе (1), может быть использован для создания некоторой дополнительной инфраструктуры. Мы можем запустить службу в файле обратного просмотра, который проверяет, что каждый индекс, указанный в имени файла тега, совпадает с индексом файла (если есть), на который указывает тег. Если совпадений нет, то можно выполнить требуемую операцию (существует ли инод? где это?), и файл обратного просмотра либо видоизменяется, либо регенерируется, а символические ссылки тега обновляются.

Я ожидаю одного хитрого случая: что, если файл с тегами не там, где теги говорят, что это должно быть, файл обратного поиска говорит, что он все еще существует, но блудный файл не там, где говорит файл поиска, файл поиска находится вне Дата? Есть несколько способов справиться с этим делом, но ни один из них не является идеальным. Кроме того, вся эта задача, кажется, подходит для Perl ...

6

Я думаю, что это может удовлетворить все ваши требования. В любом случае, это классный кусок кода:

http://pages.stern.nyu.edu/~marriaga/software/oyepa

Графический интерфейс требует Qt, но есть приложение командной строки для поиска, и тот факт, что все теги фактически находятся в имени файла, делает тривиальным манипулирование тегами | файлами из cli.

5

Удивил, что никто не упомянул TagSpaces. Он отвечает всем вашим требованиям, потому что теги хранятся в имени файла, а TagSpaces является кроссплатформенным.

TagSpaces

5

Вам, вероятно, не нужно устанавливать весь рабочий стол KDE для их библиотеки тегов, Nepomuk. Вам все равно придется установить базовые библиотеки KDE, хотя ...

4

Никто не упоминал, но вам определенно стоит взглянуть на расширенные атрибуты файловой системы. Например, у ext4 они есть. Есть инструменты getfattr и setfattr для их работы. Конечно, вам придется написать несколько сценариев оболочки для поиска файлов, помеченных sometag. Относительно упомянутых вопросов все ответы - "Да". Вы должны только принять во внимание, что это зависит от файловой системы.

2

Попробуйте бигль. Я считаю, это довольно хорошо.

Это может не соответствовать всем требованиям, и я не уверен, что мог. Например, поддерживают ли файлы FIFO расширенные атрибуты? Если они не делают, у Бигля есть резервная база данных.

2

Некоторые другие альтернативы могут быть tagasistant, tagfs или dantalian.

2

В этой недавней статье об инструментах поиска рабочего стола Linux упоминается, что Tracker поддерживает тегирование. К сожалению, он должен быть наполовину сломан в старой версии, которую они тестировали. Может это сейчас исправлено?

  1. Не для всей системы.
  2. Вы можете поддержать это.
  3. Это связано с Gnome.
1

Таким образом, вы не найдете интеграцию Nepomuk в gnome, в командной строке или где-либо еще в Linux.

И наоборот, с Tracker вы не найдете интеграцию kde AFAIK. Не уверен в CLI.

Так что, к сожалению, ответ "нет".

Более того, к сожалению, это не значит, что здесь есть хорошая возможность для его создания. Утилиты командной строки Linux не имеют много общего, например, с файловым менеджером GUI, поэтому в архитектуре нет общих компонентов, которые можно было бы расширить для поддержки этой концепции.

0

Я сделал небольшую программу, которая использует SQLite для этой цели. Это решило мою нужду, но, возможно, это поможет и вам:

https://github.com/alvatar/dfym

Единственная проблема этого подхода заключается в том, что он не синхронизируется с перемещениями и удалениями, но решает проблему относительно статических файлов.

0

TMSU

TMSU - это инструмент для маркировки ваших файлов. Он предоставляет простую утилиту командной строки для применения тегов и виртуальную файловую систему, чтобы предоставить вам представление на основе тегов ваших файлов из любой другой программы.

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

Удивлен, никто не упомянул об этом.

-1

Я предлагаю взглянуть на систему контроля версий, такую как Subversion, для таких функций, помимо файловой системы. Некоторые из них могут быть лучше для вас, чем другие, но в целом:

  • Многие поддерживают тегирование (конечно, подрывную деятельность).
  • Многие кроссплатформенные; Windows, Mac, Linux, почти все Unixes.
  • Многие из них имеют как графические интерфейсы, так и клиенты командной строки.
  • У многих уже есть привязки для вашего любимого языка программирования / сценариев.
  • Многие легко поддерживаются.
  • Многие из них разработаны так, чтобы ими можно было легко обмениваться.
  • Многие позволяют вам контролировать доступ.
  • Вам не нужно заново изобретать колесо.
    • Вы изучаете и используете стандартные команды / инструменты, которые уже используются миллионами.
  • Вы можете установить его сегодня для своего любимого репозитория ОС; apt-get install, yum install
  • Вы также получаете управление версиями "бесплатно".

Пример использования Subversion: ~/svn/atestrepository: $ svn propset mytag "something" dir1 property 'mytag' set on 'dir1' $ svn propset myothertag "nothing" dir1/file1 property 'myothertag' set on 'dir1/file1' $ svn propset anemptytag "" dir1/file2 property 'anemptytag' set on 'dir1/file2'

$ svn propget -R mytag dir1 - что-то ~/svn/atestrepository:$ svn propget -R myothertag dir1/file1 - ничего $ svn propget -R anemptytag dir1/file2 - $ svn proplist dir1/file2 Свойства в 'dir1/file2':anemptytag svn:ключевые слова

Я бы не рекомендовал эти инструменты для больших (размером в гигабайт) регулярно меняющихся двоичных файлов, но для всего остального они уже хорошо зарекомендовали себя и масштабируются до очень больших размеров.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .