Szukałem sposobu na oznaczenie plików i wyszukiwanie / filtrowanie ich na podstawie tych tagów.
Oto moje ( zaktualizowane ) wymagania:
- każdy plik czytelny dla użytkownika może być dowolnie oznaczony
- użytkownik może wyszukiwać pliki pasujące do jednego lub kilku tagów
- pliki można przenosić bez utraty wcześniej powiązanych tagów
- można łatwo wykonać kopię zapasową systemu
- brak zależności od dowolnego środowiska pulpitu
- jeśli w grę wchodzi jakieś GUI, musi nastąpić awaria cli
Miałem nadzieję, że poradzi sobie z tym jakiś hackerski system plików i coreutils, ale jeszcze o tym nie myślałem.
Tymczasem przejrzę beagle i metatrackera, o których tu wspomniano, i zobaczę, jak się zachowują.
Ok, więc beagle ma ogromne zależności od gnome, a tracker jest w porządku, ale nadal ma pewne zależności, których nie lubię ...
Robiłem trochę więcej badań, a droga do rozwiązania mogłaby równie dobrze być rozszerzonymi atrybutami plików .
Jest to natywne rozwiązanie dla najnowszych systemów plików, ale nie są jeszcze bardzo dobrze obsługiwane (większość coreutils niszczy je domyślnie, na przykład cp potrzebuje flagi -a, aby je zachować). Chciałbym usłyszeć kilka przemyśleń na temat ich używania, podczas gdy ja sam próbuję swoich sił w hakowaniu, choć może to uzasadniać nowe pytanie.
źródło
Odpowiedzi:
Nie jest jasne, jakiego rodzaju poszukiwania chcesz. Jeśli chcesz, aby działał gdziekolwiek w Uniksie, a nie tylko w twoim katalogu domowym, a chcesz tylko wyszukiwać na podstawie ścieżek, poniższy schemat jest wykonalny, z odrobiną włamań do powłoki i przy użyciu standardowego
locatedb
:.path-tags
;_
) ma link$TAG_$FILE -> ../$FILE
Pozostawiam
locate-tag
tobie szczegóły skryptu; powinien być dwu- lub trzy-liniowy, używając tylkolocate
hakerskiego polecenia i powłoki. (Jeśli jesteś zainteresowany, mógłbym napisać jeden).Niektórzy faceci KDE mówili o tego rodzaju schemacie metadanych, chociaż nie pamiętam szczegółów.
Powinno być również możliwe wykonanie bardziej wyrafinowanych, sprawdzających zawartość testów opartych na tym schemacie z podobnym skryptem
find
.Myśli na temat zaktualizowanych wymagań
$TAG_$INODE_$FILE
i mamy skuteczny sposób na znalezienie ścieżek, które mają dany i-węzeł , możemy to zrobić, tracąc tagi tylko wtedy, gdy wyjdziemy z systemu plików. Kopiowanie plików może sprawiać problemy, a to jest znacznie bardziej skomplikowane niż moja pierwotna sugestia.Postscript Plik „look-inode-lookup” opisany przez link (2), który pokazałeś mi w odpowiedzi na (1), może być wykorzystany do zapewnienia dodatkowej infrastruktury. Możemy uruchomić usługę na pliku wyszukiwania wstecznego, który sprawdza, czy każdy i-węzeł podany w nazwie pliku znacznika jest zgodny z i-węzłem pliku (jeśli istnieje), na który wskazuje znacznik. Jeśli nie ma dopasowania, można wykonać wymaganą operację (czy i-węzeł nadal istnieje? Gdzie to jest?), A plik wyszukiwania wstecznego jest mutowany lub regenerowany, a dowiązania symboliczne znaczników są aktualizowane.
Przewiduję jeden trudny przypadek: co się stanie, jeśli oznaczony plik nie znajduje się w miejscu, w którym znaczniki mówią, że powinien być, plik wyszukiwania wstecznego mówi, że nadal istnieje, ale plik marnotrawny nie znajduje się w miejscu, w którym znajduje się plik wyszukiwania, ponieważ plik wyszukiwania jest poza data? Istnieje kilka sposobów radzenia sobie z tą sprawą, żaden oczywiście nie jest idealny. Poza tym to całe zadanie wydaje się być czymś, co Perl doskonale nadaje się do ...
źródło
Właśnie wypuściłem wersję alfa mojego nowego programu, który próbuje zapewnić tę funkcjonalność. Obecnie spełnia niektóre, ale nie wszystkie, Twoje wymagania. W każdym razie może Cię to zainteresować. Zapewnia narzędzie wiersza polecenia do oznaczania i wirtualny system plików do przeglądania (gdzie znaczniki są reprezentowane przez katalogi).
http://www.tmsu.org/
Tak.
Tak. Albo za pomocą narzędzia wiersza polecenia lub przeglądając katalogi znaczników w wirtualnym systemie plików.
Nie. Jednak aplikacja przechowuje odciski palców oznaczonych plików, które pomagają zidentyfikować przeniesione pliki. Udostępniono polecenie „naprawy”, które zaktualizuje ścieżki przeniesionych plików. (Oczywiście ten mechanizm ulega awarii, jeśli plik zostanie przeniesiony i zmodyfikowany).
Tak. Jest to prosty plik bazy danych Sqlite 3.
Tak. Bez zależności i ponieważ można go uruchomić jako wirtualny system plików, można go postrzegać jako system plików w dowolnym programie obsługującym łącza symboliczne.
Obecnie brak GUI.
źródło
mv
,cp
arm
który obsługuje tagi, jak również (nazywamy je na przykładtmv
,tcp
atrm
), wówczas nie stracą tagów przynajmniej jeśli ktoś korzysta z wiersza poleceń, aby przenieść pliki wokół ...tmsu-fs-mv
,tmsu-fs-rm
itmsu-fs-merge
.Myślę, że to może spełnić wszystkie twoje wymagania. W każdym razie jest to fajny kawałek kodu:
http://pages.stern.nyu.edu/~marriaga/software/oyepa
GUI wymaga Qt, ale istnieje aplikacja wiersza poleceń do wyszukiwania, a fakt, że wszystkie tagi faktycznie znajdują się w nazwie pliku, sprawia, że manipulowanie tagami | plikami z cli jest banalne.
źródło
Nikt nie wspominał, ale zdecydowanie powinieneś przyjrzeć się rozszerzonym atrybutom systemu plików. Na przykład ext4 je ma. istnieją narzędzia getfattr i setfattr, aby sobie z nimi poradzić. Oczywiście będziesz musiał napisać kilka skryptów powłoki, aby wyszukać pliki oznaczone czymś. Jeśli chodzi o wspomniane pytania, wszystkie odpowiedzi są „Tak”. Należy wziąć pod uwagę tylko, że zależy to od systemu plików.
źródło
Zaskoczony, że nikt nie wspomniał o TagSpaces . Spełnia wszystkie Twoje wymagania, ponieważ tagi są przechowywane w nazwie pliku, a TagSpaces jest wieloplatformowy.
źródło
Prawdopodobnie nie musisz instalować całego pulpitu KDE dla biblioteki tagów Nepomuk. Nadal będziesz musiał zainstalować biblioteki podstawowe KDE, jednak ...
źródło
Ten ostatni artykuł na temat Linux Desktop Search Tools wspomina, że Tracker obsługuje tagowanie. Niestety, w starej wersji, którą przetestowali, ma być w połowie złamana. Może teraz jest to naprawione?
źródło
Wypróbuj Beagle . Uważam, że jest całkiem niezły.
Może nie spełniać wszystkich wymagań i nie jestem pewien, co mogłoby. Na przykład, czy pliki FIFO obsługują atrybuty rozszerzone? Jeśli nie, Beagle ma rezerwową bazę danych.
źródło
Niektóre inne alternatywy mogą być tagasistant , tagfs lub dantalian .
źródło
Dlatego nie znajdziesz integracji Nepomuka w gnome, w wierszu poleceń lub w innym miejscu w systemie Linux.
I odwrotnie, dzięki Trackerowi nie znajdziesz AFAIK integracji kde. Nie jestem pewien w CLI.
Niestety odpowiedź wydaje się „nie”.
Co więcej, nie oznacza to również, że istnieje tutaj dobra okazja do jej zbudowania. Na przykład narzędzia wiersza poleceń systemu Linux nie mają wiele wspólnego z menedżerem plików GUI, więc pod względem architektonicznym nie ma wspólnego komponentu, który można by rozszerzyć w celu obsługi tej koncepcji.
źródło
Zrobiłem mały program, który używa SQLite do tego celu. To rozwiązało moją potrzebę, ale może ci też pomaga:
https://github.com/alvatar/dfym
Jedynym problemem związanym z tym podejściem jest to, że nie synchronizuje się z ruchami i usunięciami, ale rozwiązuje problem dla względnie statycznych plików.
źródło
TMSU
Zaskoczony, nikt o tym nie wspominał.
źródło
Proponuję rzucić okiem na system kontroli wersji, taki jak Subversion, dla tego rodzaju funkcji powyżej i poza systemem plików. Niektóre mogą być dla Ciebie lepsze niż inne, ale ogólnie:
Przykład cli z 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
Nie poleciłbym, aby te narzędzia były regularnie zmieniane w dużych plikach binarnych (wielkości gigabajtów), ale dla wszystkich innych są już dobrze sprawdzone i skalowane do bardzo dużych rozmiarów.
źródło