Що є хорошим рішенням для тегів файлів у Linux? [зачинено]


71

Я шукав спосіб позначити свої файли та шукати / фільтрувати їх на основі цих тегів.

Ось мої ( оновлені ) вимоги:

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

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


Гаразд, Бігль має величезні залежності від гнома, а трекер - це нормально, але все-таки є деякі залежності, які мені не подобаються ...

Проводили ще кілька досліджень, і цей шлях можна було б розширити атрибутами файлів .
Це нативне рішення для більшості останніх файлових систем, але вони ще не дуже добре підтримуються (більшість coreutils знищує їх за замовчуванням, cp, наприклад, потрібен прапор -a, щоб зберегти їх). Хотілося б почути деякі думки щодо їх використання, поки я сам намагаюся влаштувати деякі хакі, хоча це може бути підставою для нового питання.


2
Проблеми з розширеними атрибутами файлів: (i) На мій досвід, вони створюють неприємності, коли потрібно зробити резервну копію. (ii) Ви не можете використовувати їх під час переміщення між файловими системами. Крім цього, вони були б правильною річчю.
Чарльз Стюарт


На форумах PC-BSD з посиланням на видання 2010 року цього питання: PC-BSD, розширені атрибути та теги; Підхід OpenMeta та Apple
Грехем Перрін

Відповіді:


13

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

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

Деталі locate-tagсценарію я залишаю вам; це повинен бути дво- або трилайнєр, використовуючи лише locateхакерство команд і оболонок. (Якщо вам цікаво, я можу написати один).

Деякі з глав KDE розповідали про таку схему метаданих, хоча деталей я не пам'ятаю.

Слід також мати можливість робити більш складні тести з вивчення контенту на основі цієї схеми з аналогічним сценарієм, обгорнутим навколо find.

Думки про оновлені вимоги

  1. будь-який файл, прочитаний користувачем, можна вільно помітити - Так, не повинно бути проблем
  2. користувач може шукати файли, що відповідають одному або декільком тегам - Аналогічно
  3. Файли можна переміщувати, не втрачаючи раніше пов’язаних тегів - Каталоги, які вони заселяють, можна вільно переміщувати, але якщо файл переміщено з каталогу, ми опинилися в біді. Якщо теги прийняли форму, $TAG_$INODE_$FILEі у нас є ефективний спосіб знайти, які шляхи мають заданий inode , ми можемо це зробити, втрачаючи теги, лише якщо ми переходимо з файлових систем. Копіювання файлів може створити певні проблеми, і це явно складніше, ніж моя оригінальна пропозиція.
  4. систему можна було б створити резервну копію - не дуже важко.
  5. немає залежностей від будь-якого середовища робочого столу - немає
  6. якщо задіяний якийсь gui, мусить бути резервний кліп - саме там ми живемо!

Постскрипт Файл "зворотного введення-пошуку", описаний за посиланням (2), який ви мені показали у своїй відповіді на (1), може використовуватися для надання деякої додаткової інфраструктури. Ми можемо запустити службу у файлі зворотного пошуку, який перевіряє, чи відповідає кожен inode, вказаний у імені файлу тегу, відповідний входу файла (якщо такий є), на який вказує тег. Якщо немає відповідності, то може бути проведена необхідна операція (чи існує ще одна індея? Де це?), А файл зворотного пошуку або мутується, або регенерується, і тег посилається на оновлення.

Я передбачаю один складний випадок: що робити, якщо тегований файл знаходиться не там, де теги кажуть, що має бути, у зворотному файлі пошуку йдеться, що він все ще існує, але блудний файл не там, де файл пошуку каже, що він є, а файл пошуку не знаходиться дата? Є кілька способів вирішити цю справу, жоден, очевидно, ідеальний. Крім цього, все це завдання, схоже, на те, що Perl добре підходить ...


1
Це приємно, і я теж думав про використання символьних посилань. Проблема в тому, що файл не можна переміщувати без втрати тегів. В ідеалі теги були б агностичними, і пошук тегу повинен повернути фактичний файл, а не мертве символьне посилання ... PS: Я все для рішення на основі оболонки, але я думаю, що проблемний домен робить це так, що це Було б досить болісно підтримувати лише сценарії оболонки, сподіваюся, хтось докаже мене неправильно
липень

Я відредагував своє запитання, щоб (я сподіваюся) зрозуміти, яке рішення я шукаю. ура
липень

Чорт я ніколи не усвідомлював, що вклади, де подобаються стійкі посібники для файлів, це їжа для роздумів!
липень

1
inode - це посібники, але вони прив’язані до заданого fs, тому вони не є орієнтирами. Це не погано, оскільки копіювання, резервне копіювання, архівування та & c означають, що файли дублюються та зберігаються в інших файлах, і ви хочете, щоб стан fs надав вам достатньо інформації, щоб відшаровувати результати.
Чарльз Стюарт

1
Я пропустив пунктин, яке програмне забезпечення може це вмістити? Я сподівався на те, що я можу використати випадково, не пишучи власної інфраструктури. (Але звичайно, щоб я міг
обміняти

22

Щойно я випустив альфа своєї нової програми, яка намагається надати цю функціональність. В даний час він відповідає деяким, але не всім, вашим вимогам. Це може вас зацікавити в будь-якому випадку. Він надає інструмент командного рядка для тегів та віртуальну файлову систему для перегляду (де теги представлені в каталогах).

http://www.tmsu.org/

будь-який файл, прочитаний користувачем, можна вільно помітити

Так.

користувач може шукати файли, що відповідають одному або декільком тегам

Так. Або через інструмент командного рядка, або за допомогою перегляду каталогів тегів у віртуальній файловій системі.

файли можна переміщувати, не втрачаючи раніше пов’язаних тегів

Ні. Однак додаток зберігає відбитки пальців файлів з тегами, які використовуються для ідентифікації переміщених файлів. Передбачена команда «ремонт», яка оновлює шляхи переміщення файлів. (Очевидно, цей механізм виходить з ладу, якщо файл переміщений і змінений.)

система може бути резервна копія легко

Так. Це простий файл бази даних Sqlite 3.

відсутність залежності від будь-якого середовища робочого столу

Так. Ніяких залежностей, і оскільки його можна запускати як віртуальну файлову систему, її можна переглянути як файлову систему в будь-якій програмі, що підтримує символічні посилання.

якщо задіяний якийсь gui, повинен бути резервний кліп

Наразі немає графічного інтерфейсу.


Виглядає дуже цікаво. Чи маєте ви якесь уявлення, як реалізувати можливість переміщення файлів, не втрачаючи пов’язаних тегів?
студент

@student: в даний час існує команда 'repair', яка стосується переміщених та змінених файлів. (Якщо ви обидва перемістите та зміните файл, однак це не буде виявлено.)
Пол Руан

Може бути, можна написати варіанти mv, cpі rmякі обробляють свої мітки , а також (назвемо їх, наприклад tmv, tcpі trm) , то один би не втратити теги , по крайней мере , якщо один використовує командний рядок для переміщення файлів навколо ...
студент

@student TMSU тепер включає в себе кілька сценаріїв , які виконують операції з файлової системою в той час як збереження бази даних в актуальному стані : tmsu-fs-mv, tmsu-fs-rmі tmsu-fs-merge.
Пол Руан

Вибачте моє запитання, але ... ¿чому б просто не клонувати теги при автоматичному переміщенні файлу? Чи потрібно мені вручну оновлювати файли під час переміщення?
erm3nda

6

Я думаю, що це може відповідати всім вашим вимогам. У будь-якому випадку, це класний фрагмент коду:

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

GUI вимагає Qt, але є програма командного рядка для пошуку, і той факт, що всі теги є насправді у імені файлу, робить його тривіальним для маніпулювання тегів | файлів із кліпу.


1
Зі сторінки: "Інформація про теги зберігається у назві файлу" - так як виглядають позначені назви файлів? До речі, посилання на цій сторінці дуже цікаві: +1.
Чарльз Стюарт

доповідь за рахунок [робочий матеріал, год., вироблений мною]
.odt

@laramichaels Я знаю, що це досить старе, але мене підхід дуже зацікавив. Якби не відсутність документації (ніде там не пояснено, як працює іменування файлів), я б його прийняв. Якщо у вас є якісь новини про такі інструменти, будь ласка, повідомте мене про це,
TomCho

6

Ніхто не згадував, але ви обов'язково повинні ознайомитися з розширеними атрибутами файлової системи. Наприклад, ext4 має їх. є інструменти getfattr і setfattr для боротьби з ними. Звичайно, вам доведеться написати кілька скриптів оболонки, щоб шукати файли, позначені тегом. Щодо згаданих питань, усі відповіді - "Так". Вам слід врахувати лише те, що це залежить від файлової системи.


Дані файлу Inode повинні бути визначально правильним способом зробити це на ext4 fs, але не пропонуватимуть зворотної сумісності. Правильно?
erm3nda

6

Здивований, що ніхто не згадав про TagSpaces . Він відповідає всім вашим вимогам, оскільки теги зберігаються у імені файлу, а TagSpaces є кросплатформенним.

TagSpaces


1
у тестових просторах немає резервного копіювання CLI, тому він не відповідає всім вимогам. Або у нього є CLI? Якщо це станеться, будь ласка, повідомте мене!
TomCho

Немає підтримки програми в Debian 9 apt. Що-небудь йде? - - Ви можете встановити додаток за допомогою цих інструкцій tagspaces.org/products
Léo Léopold Hertz 준영

Чи можете ви порівняти вашу пропозицію з інструментами пошуку для робочого столу Linux?
Лео Леопольд Герц 준영

5

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


1
так добре, я сподівався знайти альтернативу цьому, але це виглядає не так ...
липень

2

Ця остання стаття про інструменти пошуку для робочого столу Linux згадує, що Tracker підтримує теги. На жаль, у старій версії, яку вони тестували, вона повинна бути напівзламанною. Може, це зараз виправлено?

  1. Не широка система.
  2. Ви можете створити резервну копію.
  3. Він в комплекті з Gnome.

2

Спробуйте Бігль . Я вважаю це досить добре.

Він може не відповідати всім вимогам, і я не впевнений, що міг би. Наприклад, чи підтримують файли FIFO розширені атрибути? Якщо цього немає, Бігль має резервну базу даних.


Чи може Бігль обробляти нестандартні файли?
Чарльз Стюарт

@Charles Stewart - ти маєш на увазі нетекстові файли?
pcapademic

Ні, я маю на увазі файли пристроїв, символьні посилання, FIFO та & c
Чарльз Стюарт

Це посилання не стосується проекту щодо організації документа.
грудня



1

Таким чином, ви не знайдете інтеграцію Nepomuk у gnome, у командному рядку чи деінде в Linux.

І навпаки, з Tracker ви не знайдете інтеграцію kde AFAIK. Не впевнений у CLI.

Тож, на жаль, здається, що відповідь "ні".

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


0

Я зробив невелику програму, яка використовує для цієї мети SQLite. Це вирішило мою потребу, але, можливо, це теж допоможе вам:

https://github.com/alvatar/dfym

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


0

ТМСУ

TMSU - це інструмент для позначення ваших файлів. Він надає просту утиліту командного рядка для застосування тегів та віртуальної файлової системи, щоб надати вам теги на основі файлів з будь-якої іншої програми.

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

Здивований, про це ніхто не згадав.


1
ви пропустили це ... це найвища відповідь
головоломка

-1

Я пропоную ознайомитись із системою контролю версій, такою як Subversion, для таких функцій над і поза файловою системою. Деякі можуть підійти вам краще, ніж інші, але загалом:

  • Багато хто підтримує теги (безумовно, підрив).
  • Багато хто є крос-платформою; Windows, Mac, Linux, майже всі Unixes.
  • У багатьох є як передні панелі GUI, так і клієнти командного рядка.
  • Багато хто вже має прив’язки до улюбленої мови програмування / сценаріїв.
  • Багато хто легко створити резервну копію.
  • Багато з них створені таким чином, щоб їх було легко поділити так чи інакше.
  • Багато хто дозволяє контролювати доступ.
  • Вам не доведеться заново вигадувати колесо.
    • Ви вивчаєте та використовуєте стандартні команди / інструменти, які вже використовуються мільйонами.
  • Ви можете встановити його сьогодні для улюбленого репо версії ОС; 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 - something ~/svn/atestrepository: $ svn propget -R myothertag dir1/file1 - nothing $ svn propget -R anemptytag dir1/file2 - $ svn proplist dir1/file2 Properties on 'dir1/file2': anemptytag svn:keywords

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.