Linux'ta dosya etiketleme için iyi bir çözüm nedir? [kapalı]


71

Dosyalarımı etiketlemenin ve bu etiketleri temel alarak arama / filtrelemenin bir yolunu arıyordum.

İşte ( güncellenmiş ) gereksinimlerim:

  • kullanıcı tarafından okunabilen herhangi bir dosya serbestçe etiketlenebilir
  • Bir kullanıcı bir veya birkaç etiketle eşleşen dosyaları arayabilir.
  • dosyalar daha önce ilişkilendirilmiş etiketleri kaybetmeden hareket ettirilebilir
  • sistem kolayca yedeklenebilir
  • Masaüstü ortamına bağımlılık yok
  • Herhangi bir gui varsa, bir cliback geri dönüş olmalı

Bazı temel dosya sistemlerini & coreutils'leri bununla başa çıkmalarını bekliyordum, ama bunun hakkında yeterince düşünmedim.
Bu arada burada bahsettiğim beagle ve metatracker'ı inceleyip nasıl performans gösterdiklerini göreceğim.


Tamam, bu yüzden beagle büyük cüce bağımlılıklara sahip ve izci tamam, ama yine de sevmediğim bazı bağımlılıklar var ...

Biraz daha araştırma yaptım ve gidilecek yol çok iyi dosya öznitelikleri olabilirdi .
Bu, çoğu yeni dosya sistemi için yerel bir çözümdür, ancak henüz çok iyi desteklenmemektedirler (çoğu coreutils varsayılan olarak onları yok eder, örneğin cp, onları korumak için -a bayrağı ister). Elimi bazı kesimlerde kendim denerken, bunları kullanma konusunda bazı düşünceler duymak isterim, ancak bu yeni bir soru gerektirebilir.


2
Genişletilmiş dosya özniteliklerine ilişkin sorunlar: (i) Deneyimlerime göre, yedekleme yapmak istediğinizde sıkıntı vericidir. (ii) Dosya sistemleri arasında hareket ederken bunları kullanamazsınız. Bunun dışında, Doğru Şey olacaklardı.
Charles Stewart


PC-BSD Forumlarında, bu sorunun 2010 baskısına atıfta bulunarak: PC-BSD, genişletilmiş öznitelikler ve etiketleme; OpenMeta ve Apple'ın yaklaşımı
Graham Perrin

Yanıtlar:


13

Ne tür bir arama yapmak istediğinizi belli değil. Unix'in herhangi bir yerinde çalışmasını istiyorsanız, sadece ana dizininizde ve yalnızca yol adı tabanlı aramalar yapmak istiyorsanız, aşağıdaki şema biraz kabuk korsanlığıyla ve standardın kullanılmasıyla uygulanabilir locatedb:

  1. En az bir etiketli dosya içeren her bir dizinin standart bir alt dizine ihtiyacı vardır .path-tags;
  2. $ FILE dizindeki $ TAG (karakter içermemesi gereken _) linkini içeren her dosyada bir bağlantı vardır.$TAG_$FILE -> ../$FILE

locate-tagSenaryonun ayrıntılarını size bırakıyorum ; sadece locatekomut ve kabuk korsanlığı kullanan iki ya da üç astar olmalıdır. (Eğer ilgilenirseniz, bir tane yazabilirim).

KDE bölümlerinden bazıları meta verileri için bu tür bir programdan bahsetti, ancak ayrıntıları hatırlamıyorum.

Bu şemaya dayanan daha karmaşık, içerik inceleme testleri yapmak, etrafına sarılmış benzer bir betikle mümkün olmalıdır find.

Güncellenen gereksinimler üzerine düşünceler

  1. kullanıcı tarafından okunabilen herhangi bir dosya serbestçe etiketlenebilir - Evet, sorun olmamalı
  2. kullanıcı bir veya daha fazla etiketle eşleşen dosyaları arayabilir - Benzer şekilde
  3. dosyalar daha önce ilişkilendirilmiş etiketleri kaybetmeden hareket ettirilebilir - Yaşadıkları dizinler serbestçe hareket ettirilebilir, ancak dosya dizinden taşınırsa, başımız belaya girer. Etiketler formunu aldıysa $TAG_$INODE_$FILEve sahip olduğumuz yolları belirli bir düğüm var bulmak için verimli bir yol , o zaman biz dosya sistemi dışına taşımak sadece etiketleri kaybederek yapabilirsiniz. Dosyaları kopyalamak biraz sorun çıkartabilir ve bu kesinlikle benim önerimden daha karmaşık.
  4. sistem kolayca yedeklenebilir - aslında zor değil.
  5. Masaüstü ortamına bağımlılık yok - Yok
  6. eğer herhangi bir gui varsa, bir cliback geri dönüşü olmalı - yaşadığımız yer orası !

Postscript Yanıtınıza (1) gösterdiğiniz link (2) tarafından açıklanan "reverse-inode-lookup" dosyası, bazı ek altyapılar vermek için kullanılabilir. Bir etiketin dosya adında verilen her bir inode'un (varsa) etiketin işaret ettiği dosyanın inode'uyla eşleştiğini kontrol eden ters arama dosyasında bir servis çalıştırabiliriz. Eşleşme yoksa, gerekli cerrahi işlem yapılabilir (inode hala var mı? Nerede?) Ve geriye doğru arama dosyası mutasyona uğramış veya yenilenmiş ve etiket işaretleri güncellenmiştir.

Ben bir zor durumda bekliyoruz: peki etiketli dosya etiketlerin olması gerektiği yerde değilse, geriye doğru arama dosyası hala var diyor, ancak prodigal dosya arama dosyasının bulunduğu yerde değil, arama dosyasının dışına çıkıyor tarih, randevu, biriyle çıkmak? Bu olayı ele almanın birkaç yolu vardır, kesinlikle hiçbiri ideal değildir. Bundan başka, bütün bu görev Perl’in uygun olduğu bir şey gibi görünüyor ...


1
Bu çok hoş ve ben de sembolik bağlantılar kullanmayı düşünüyorum. Sorun şu ki, bir dosya etiketlerini kaybetmeden hareket ettirilemez. İdeal olarak, etiketler yol agnostik olur ve bir etiket aramak, ölü bir sembolik bağlantı yerine gerçek dosyayı döndürmelidir ... PS: Tamamen kabuk tabanlı bir çözüm arıyorum, ancak sorunlu alanın bunu yapmasını düşünüyorum. sadece kabuk senaryoları ile devam etmek çok acı verici olur, umarım biri bana yanlış olduğunu kanıtlar
julien

Sorumu (umarım) nasıl bir çözüme kavuştuğumu daha açık hale getirmek için düzenledim. Şerefe
julien

Kahretsin, dosyalar için ısrarcı rehberler gibi, bu düşünce için yiyecek gibi inode fark etmemiştim!
julien,

1
inode'lar kızaklardır, ancak belirli bir fs'ye bağlanırlar, bu yüzden kılavuz değildirler. Kopyalama, yedekleme, arşivleme, & c, diğer dosyaların içinde kopyalanıp saklanacağını ve fs durumunun sonuçları çözmek için size yeterli bilgi vermesini istediğiniz için bu kötü bir şey değildir.
Charles Stewart

1
Punchline'ı kaçırdım, hangi yazılımı buna sığdırabilir? Kendi altyapımı yazmadan rahatlıkla kullanabileceğim bir şey umuyordum. (Ama düz, ne zaman
istersem

22

Bu işlevselliği sağlamaya çalışan yeni programımın bir alfa sürümünü yayımladım. Şu anda gereksinimlerinizden bazılarını, ancak hepsini karşılamıyor. Zaten sizin ilginizi çekebilir. Etiketlemek için bir komut satırı aracı ve göz atmak için sanal bir dosya sistemi (etiketlerin dizinlerle temsil edildiği) sağlar.

http://www.tmsu.org/

kullanıcı tarafından okunabilen herhangi bir dosya serbestçe etiketlenebilir

Evet.

Bir kullanıcı bir veya birkaç etiketle eşleşen dosyaları arayabilir.

Evet. Ya komut satırı aracıyla ya da sanal dosya sistemindeki etiket dizinlerine göz atarak.

dosyalar daha önce ilişkilendirilmiş etiketleri kaybetmeden hareket ettirilebilir

Hayır. Ancak uygulama, taşınan dosyaların tanımlanmasına yardımcı olmak için etiketlenmiş dosyaların parmak izlerini saklar. Taşınan dosyaların yollarını güncelleyecek bir 'onarım' komutu verilmiştir. (Açıkçası, bir dosya hem taşınmış hem de değiştirilmişse bu mekanizma bozulur.)

sistem kolayca yedeklenebilir

Evet. Bu basit bir Sqlite 3 veritabanı dosyasıdır.

Masaüstü ortamına bağımlılık yok

Evet. Bağımlılık yok ve sanal bir dosya sistemi olarak çalıştırılabildiğinden, sembolik bağları destekleyen herhangi bir programda bir dosya sistemi olarak algılanmak mümkündür.

Herhangi bir gui varsa, bir cliback geri dönüş olmalı

Şu anda GUI yok.


Çok ilginç görünüyor. İlişkilendirilmiş etiketleri kaybetmeden dosyaları dolaşma imkanının nasıl uygulanacağı hakkında bir fikriniz var mı?
Öğrenci

@student: şu anda taşınan ve değiştirilmiş dosyalarla ilgilenen bir 'onarım' komutu var. (Bununla birlikte, bir dosyayı hem taşır hem de değiştirirseniz, bu algılanmaz.)
Paul Ruane

Belki bir varyantlarını yazabilirsiniz mv, cpve rmhangi yanı etiketlerinizi işlemek (örneğin onları çağırmak tmv, tcpve trm... bir çevrede dosya taşımak CommandLine kullanan en az olursa o zaman bir tane etiketleri kaybetmek olmaz)
Öğrenci

@student TMSU şimdi güncel veri tabanını korurken dosya sistemi işlemleri gerçekleştirmek bazı komut dosyalarını içerir: tmsu-fs-mv, tmsu-fs-rmve tmsu-fs-merge.
Paul Ruane

Soruma özür dilerim ama ... ¿neden bir dosyayı otomatik olarak taşırken sadece etiketleri kopyalamıyorsunuz? Taşırken dosyaları manuel olarak güncellemem gerekir mi?
erm3nda

6

Bunu düşünmek belki tüm gereksinimlerini karşılamak. Her durumda, harika bir kod parçasıdır:

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

GUI, Qt'yi gerektirir, ancak arama için bir komut satırı uygulaması vardır ve tüm etiketlerin gerçekte dosya adında olmaları, etiketlerin |


1
Sayfadan: "Etiket bilgileri dosya adında saklanır" - yani etiketli dosya adları nasıl görünür? BTW, bu sayfadaki bağlantılar çok ilginç: +1.
Charles Stewart

fatura raporu [işle ilgili şeyler, benim tarafımdan üretilmiş] .odt
laramichaels

@laramichaels Bunun oldukça eski olduğunu biliyorum, ancak yaklaşımı çok ilgi çekici buldum. Eğer dokümantasyon eksikliği olmasaydı (hiçbir yerde dosya isimlendirmenin nasıl çalıştığı açıklanmadı) onu benimseyecektim. Bu tür araçlar hakkında herhangi bir haberiniz varsa, lütfen bana bildirin,
TomCho

6

Kimse bahsetmedi, ancak kesinlikle genişletilmiş dosya sistemi özelliklerine bakmalısınız. Örneğin ext4 bunlara sahiptir. Onlarla başa çıkmak için getfattr ve setfattr araçları var. Tabii ki bazı etiketleri ile etiketlenmiş dosyaları aramak için bazı kabuk komut dosyaları yazmak zorunda kalacak. Söz konusu sorulara gelince tüm cevaplar "Evet" dir. Sadece dosya sistemine bağlı olduğunu göz önünde bulundurmalısınız.


Dosyanın Inode verileri kesinlikle bunu ext4 fs'de yapmanın doğru yolu olmalı, ancak geriye dönük bir uyumluluk sağlamayacak. Sağ?
erm3nda

6

TagSpaces'ten kimsenin bahsetmediğine şaşırdım . Tüm gereksinimlerinizi karşılar çünkü etiketler dosya adında saklanır ve TagSpaces çapraz platformdur.

TagSpaces


1
tagspaces bir CLI geri dönüşüne sahip olmadığı için tüm gereksinimleri karşılamıyor. Ya da bir CLI var mı? Varsa, lütfen bana bildirin!
TomCho

Debian 9 apt'de başvuru için destek yoktur. Bir şey geliyor mu? - - Uygulamayı bu talimatlarla yükleyebilirsin tagspaces.org/products
Léo Léopold Hertz 준영

Teklifinizi lütfen Linux Masaüstü Arama Araçları ile karşılaştırabilir misiniz?
Léo Léopold Hertz 준영

5

Etiketleme kitaplığı Nepomuk için muhtemelen KDE masaüstünün tamamını kurmanıza gerek yoktur. Yine de KDE tabanlı kütüphaneleri kurmanız gerekirdi ...


1
evet, buna bir alternatif bulmayı umuyordum, ama öyle görünmüyor ...
julien


2

Beagle'ı dene . Ben oldukça iyi buluyorum.

Tüm gereklilikleri karşılamayabilir ve ne olabileceğinden emin değilim. Örneğin, FIFO dosyaları genişletilmiş öznitelikleri destekliyor mu? Olmazlarsa , Beagle'ın bir geri dönüş veritabanı var.


Beagle normal olmayan dosyaları işleyebilir mi?
Charles Stewart

@Charles Stewart - metin olmayan dosyaları mı kastediyorsunuz?
pcapademic

Hayır, aygıt dosyaları, sembolik linkler, FIFO'lar, ve c
Charles Stewart

Bu link doküman organizasyonu ile ilgili bir projeye işaret etmiyor.
03'te



1

Böylece, Nepomuk entegrasyonunu gnome'da, komut satırında veya Linux'ta başka bir yerde bulamazsınız.

Tersine, Tracker ile kde entegrasyonu AFAIK'ı bulamazsınız. CLI'dan emin değilim.

Yani ne yazık ki, cevap "hayır" gibi görünüyor.

Daha da yazık ki, bu da burada bir bina inşa etmek için iyi bir fırsat olduğu anlamına gelmez. Linux komut satırı yardımcı programları GUI dosya yöneticisi ile pek ortak noktalara sahip değildir, örneğin mimari olarak kavramı desteklemek için genişletilebilecek ortak bir bileşen yoktur.


0

Bu amaçla SQLite kullanan küçük bir program yaptım. İhtiyacımı çözdü, ama belki de sana yardım ediyor:

https://github.com/alvatar/dfym

Bu yaklaşımla ilgili tek sorun, hamle ve silme işlemleriyle senkronize olmamak, ancak nispeten statik dosyalar için sorunu çözmesidir.


0

TMSU

TMSU dosyalarınızı etiketlemek için bir araçtır. Etiketlerinizi ve sanal bir dosya sistemini uygulamak için basit bir komut satırı yardımcı programı sağlar ve dosyalarınızı etiket tabanlı bir görünümden başka bir programdan alırsınız.

TMSU dosyalarınızı hiçbir şekilde değiştirmez: diskte veya ağda, nereye koyduğunuza bağlı olarak değişmeden kalır. TMSU kendi veritabanını korur ve kurduğunuz etiketleri temel alarak istediğiniz yere monte edebileceğiniz basit bir görünüm elde edersiniz.

Hiç kimsenin bahsetmediğine şaşırdım.


1
kaçırdın ... en yüksek oyu aldı
pufferfish

-1

Dosya sisteminin üstünde ve ötesinde bu tür özellikler için Subversion gibi bir sürüm kontrol sistemine göz atmanızı öneririm. Bazıları sizin için diğerlerinden daha uygun olabilir ama genellikle:

  • Birçok destek etiketleme (kesinlikle yıkılma).
  • Birçoğu çapraz platformdur; Windows, Mac, Linux, hemen hemen tüm Unix'ler.
  • Birçoğu GUI ön uçlarına ve komut satırı istemcilerine sahiptir.
  • Birçoğunuz zaten en sevdiğiniz programlama / kodlama dili için ciltleme var.
  • Birçoğu kolayca yedeklenir.
  • Birçoğu, bir şekilde veya başka bir şekilde kolayca paylaşılabilecek şekilde tasarlanmıştır.
  • Birçoğu erişimi kontrol etmenize izin veriyor.
  • Tekerleği yeniden icat etmeniz gerekmez.
    • Milyonlarca zaten kullanılan standart komutları / araçları öğreniyor ve kullanıyorsunuz.
  • En sevdiğiniz işletim sistemi deposu için bugün yükleyebilirsiniz; apt-get install, yum yükleme
  • Ayrıca "ücretsiz" sürüm yönetimine sahip olursunuz.

Subversion ile bir cli örneği: ~/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

Bu araçların düzenli olarak değişen ikili dosyaları büyük (gigabayt büyüklüğünde) kullanmaları için tavsiye etmem ama her şey için kanıtlanmış ve çok büyük boyutlara ölçeklendirilmişlerdir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.