Apa solusi yang baik untuk penandaan file di linux? [Tutup]


71

Saya telah mencari cara untuk menandai file saya dan mencari / memfilternya berdasarkan tag tersebut.

Berikut adalah persyaratan (yang diperbarui ) saya:

  • file apa pun yang dapat dibaca oleh pengguna dapat ditandai secara bebas
  • pengguna dapat mencari file yang cocok dengan satu atau beberapa tag
  • file dapat dipindahkan tanpa kehilangan tag terkait sebelumnya
  • sistem dapat didukung dengan mudah
  • tidak ada ketergantungan pada lingkungan desktop apa pun
  • jika ada gui yang terlibat, pasti ada fallback cli

Saya berharap ada beberapa filesystem dasar & peretas coreutils untuk menangani hal ini, tetapi saya belum memikirkan hal ini dengan cukup keras.
Sementara itu saya akan mengulas beagle dan metatracker, yang telah disebutkan di sini, dan melihat bagaimana kinerjanya.


Ok jadi beagle memiliki dependensi gnome yang besar, dan pelacaknya okish, tetapi masih memiliki beberapa dependensi yang saya tidak suka ...

Telah melakukan penelitian lebih lanjut, dan cara untuk pergi bisa sangat diperluas dengan atribut file .
Itu adalah solusi asli untuk kebanyakan filesystem terbaru, tetapi mereka belum didukung dengan sangat baik (sebagian besar coreutils menghancurkannya secara default, cp misalnya membutuhkan tanda -a untuk melestarikannya). Ingin mendengar beberapa pemikiran tentang penggunaannya sementara saya mencoba sendiri beberapa retasan, walaupun ini mungkin memerlukan pertanyaan baru.


2
Masalah dengan atribut file yang diperluas: (i) Dalam pengalaman saya, itu adalah gangguan ketika Anda ingin membuat cadangan. (ii) Anda tidak dapat menggunakannya saat berpindah antar sistem file. Terlepas dari itu, mereka akan menjadi Hal yang Benar.
Charles Stewart


Dalam Forum PC-BSD, dengan merujuk pada edisi 2010 pertanyaan ini: PC-BSD, atribut dan penandaan diperluas; Pendekatan OpenMeta dan Apple
Graham Perrin

Jawaban:


13

Tidak jelas pencarian seperti apa yang Anda inginkan. Jika Anda ingin itu berfungsi di mana saja di unix, bukan hanya direktori home Anda, dan Anda hanya ingin melakukan pencarian berbasis pathname, skema berikut ini bisa diterapkan, dengan sedikit peretasan shell, dan menggunakan standar locatedb:

  1. Setiap direktori yang berisi setidaknya satu file yang ditandai membutuhkan subdirektori standar, misalnya .path-tags;
  2. Setiap file dalam direktori $ FILE dengan tautan $ TAG (yang seharusnya tidak mengandung char _) memiliki tautan$TAG_$FILE -> ../$FILE

Saya menyerahkan detail locate-tagnaskahnya kepada Anda; harus berupa dua atau tiga baris, hanya menggunakan locateperintah dan shell hackery. (Jika Anda tertarik, saya bisa menulis satu).

Beberapa bab KDE berbicara tentang skema semacam ini untuk metadata, meskipun saya tidak ingat detailnya.

Seharusnya juga dimungkinkan untuk melakukan tes pemeriksaan konten yang lebih canggih berdasarkan skema ini dengan skrip yang serupa find.

Pikiran tentang persyaratan yang diperbarui

  1. file apa pun yang dapat dibaca oleh pengguna dapat ditandai secara bebas - Ya, seharusnya tidak ada masalah
  2. pengguna dapat mencari file yang cocok dengan satu atau beberapa tag - Demikian juga
  3. file dapat dipindahkan tanpa kehilangan tag yang terkait sebelumnya - Direktori yang mereka huni dapat dipindahkan dengan bebas, tetapi jika file tersebut dipindahkan dari direktori, kita dalam masalah. Jika tag mengambil bentuk $TAG_$INODE_$FILEdan kami memiliki cara yang efisien untuk menemukan jalur mana yang memiliki inode yang diberikan , maka kita bisa melakukan ini, kehilangan tag hanya jika kita keluar dari sistem file. Menyalin file mungkin membuat beberapa masalah, dan ini jelas lebih rumit daripada saran asli saya.
  4. sistem dapat didukung dengan mudah - pada dasarnya tidak sulit.
  5. tidak ada ketergantungan pada lingkungan desktop apa pun - tidak ada
  6. jika ada gui yang terlibat, pasti ada cli fallback - di situlah kita hidup!

Postscript File "reverse-inode-lookup" yang dijelaskan oleh tautan (2) yang Anda tunjukkan pada jawaban Anda untuk (1) dapat digunakan untuk memberikan beberapa infrastruktur tambahan. Kita dapat menjalankan layanan pada file pencarian terbalik, yang memeriksa bahwa setiap inode yang diberikan dalam nama file tag cocok dengan inode file (jika ada) tag menunjuk ke. Jika tidak ada kecocokan, maka operasi yang diperlukan dapat dilakukan (apakah inode masih ada? Di mana itu?), Dan file pencarian terbalik dimutasi atau dibuat ulang, dan tag symlink diperbarui.

Saya mengantisipasi satu kasus rumit: bagaimana jika file yang ditandai tidak sesuai dengan tag yang seharusnya, file reverse lookup mengatakan itu masih ada, tetapi file yang hilang tidak di mana file pencarian mengatakan itu, file pencarian keluar dari tanggal? Ada beberapa cara untuk menangani kasus ini, tidak ada yang jelas ideal. Terlepas dari ini, seluruh tugas ini tampaknya menjadi jenis Perl yang sangat cocok untuk ...


1
Ini bagus, dan saya sudah berpikir untuk menggunakan symlink juga. Masalahnya adalah, file tidak dapat dipindahkan tanpa kehilangan tag-nya. Idealnya, tag akan menjadi jalur agnostik, dan mencari tag harus mengembalikan file yang sebenarnya, bukan symlink yang mati ... PS: Saya semua untuk solusi berbasis shell, tapi saya pikir domain masalah membuatnya sehingga 'd cukup menyakitkan untuk mempertahankan hanya melalui skrip shell, saya berharap seseorang membuktikan saya salah
julien

Saya telah mengedit pertanyaan saya untuk (mudah-mudahan) membuatnya lebih jelas solusi apa yang saya cari. cheers
julien

Sial, aku tidak pernah menyadari bahwa inode di mana seperti panduan gigih untuk file, itu makanan untuk dipikirkan!
julien

1
inode adalah uids, tetapi mereka terikat pada fs yang diberikan, jadi mereka bukan guids. Ini bukan hal yang buruk, karena menyalin, mencadangkan, mengarsipkan, & c, berarti bahwa file digandakan dan disimpan dalam file lain, dan Anda ingin negara fs memberi Anda cukup info untuk menguraikan hasil.
Charles Stewart

1
Saya melewatkan bagian lucunya, perangkat lunak apa yang bisa mengakomodasi ini? Saya berharap sesuatu yang bisa saya gunakan dengan santai tanpa menulis infrastruktur saya sendiri. (Tapi sederhana sehingga saya bisa memperluasnya sendiri bila diinginkan)
ThorSummoner

22

Saya baru saja merilis alpha dari program baru saya yang mencoba menyediakan fungsionalitas ini. Saat ini memenuhi beberapa, tetapi tidak semua, persyaratan Anda. Mungkin ini menarik bagi Anda. Ini menyediakan alat baris perintah untuk penandaan dan sistem file virtual untuk browsing (di mana tag diwakili oleh direktori).

http://www.tmsu.org/

file apa pun yang dapat dibaca oleh pengguna dapat ditandai secara bebas

Iya.

pengguna dapat mencari file yang cocok dengan satu atau beberapa tag

Iya. Baik melalui alat baris perintah atau dengan menelusuri direktori tag di sistem file virtual.

file dapat dipindahkan tanpa kehilangan tag terkait sebelumnya

Tidak. Namun aplikasi menyimpan sidik jari dari file yang ditandai yang digunakan untuk membantu mengidentifikasi file yang dipindahkan. Perintah 'perbaikan' disediakan yang akan memperbarui jalur file yang dipindahkan. (Jelas mekanisme ini rusak jika suatu file dipindahkan dan dimodifikasi.)

sistem dapat didukung dengan mudah

Iya. Ini adalah file database Sqlite 3 yang sederhana.

tidak ada ketergantungan pada lingkungan desktop apa pun

Iya. Tidak ada dependensi dan karena dapat dijalankan sebagai sistem file virtual, tersedia untuk dibaca sebagai sistem file dalam program apa pun yang mendukung tautan simbolik.

jika ada gui yang terlibat, pasti ada fallback cli

Tidak ada GUI saat ini.


Terlihat sangat menarik. Apakah Anda tahu bagaimana menerapkan kemungkinan untuk memindahkan file tanpa kehilangan tag terkait?
siswa

@student: saat ini ada perintah 'perbaikan' yang berkaitan dengan file yang dipindahkan dan dimodifikasi. (Namun, jika Anda berdua memindahkan dan memodifikasi file, ini tidak akan terdeteksi.)
Paul Ruane

Mungkin orang bisa menulis varian mv, cpdan rmyang menangani tag Anda juga (sebut mereka misalnya tmv, tcpdan trm) maka orang tidak akan kehilangan tag setidaknya jika seseorang menggunakan commandline untuk memindahkan file di sekitar ...
siswa

@student TMSU sekarang termasuk beberapa script yang melakukan operasi filesystem sementara menjaga database up to date: tmsu-fs-mv, tmsu-fs-rmdan tmsu-fs-merge.
Paul Ruane

Maafkan pertanyaan saya tapi ... ¿mengapa tidak hanya mengkloning tag ketika memindahkan file secara otomatis? Apakah saya perlu memperbarui file secara manual saat memindahkan?
erm3nda

6

Saya pikir ini mungkin memenuhi semua kebutuhan Anda. Bagaimanapun, ini adalah kode yang keren:

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

GUI memerlukan Qt, tetapi ada aplikasi baris perintah untuk mencari dan fakta bahwa semua tag sebenarnya dalam nama file membuatnya sepele untuk memanipulasi tag | file dari cli.


1
Dari halaman: "Informasi tag disimpan dalam nama file" - jadi seperti apa nama file yang ditandai? BTW, tautan di halaman itu sangat menarik: +1.
Charles Stewart

report-for-bill [barang kerja, jam, diproduksi oleh saya]
.odt

@laramichaels Saya tahu ini cukup lama, tapi saya menemukan pendekatan yang sangat menarik. Jika bukan karena kurangnya dokumentasi (tidak ada tempat yang menjelaskan bagaimana penamaan file bekerja) saya akan mengadopsinya. Jika Anda memiliki berita tentang alat tersebut, tolong beri tahu saya,
TomCho

6

Tidak ada yang disebutkan, tetapi Anda harus melihat atribut sistem file yang diperluas. ext4 misalnya memilikinya. ada alat getfattr dan setfattr untuk menghadapinya. Tentu saja Anda harus menulis beberapa skrip shell untuk mencari file yang ditandai dengan sesuatu. Mengenai pertanyaan yang disebutkan, semua jawabannya adalah "Ya". Anda hanya harus mempertimbangkan bahwa itu tergantung pada sistem file.


Data inode dari file harus secara definitif merupakan cara yang benar untuk melakukannya pada ext4 fs, tetapi tidak akan menawarkan kompatibilitas ke belakang. Baik?
erm3nda

6

Terkejut bahwa tidak ada yang menyebut TagSpaces . Memenuhi semua persyaratan Anda karena tag disimpan dalam nama file dan TagSpaces adalah lintas-platform.

TagSpaces


1
tagspaces tidak memiliki cadangan CLI, jadi tidak memenuhi semua persyaratan. Atau apakah ia memiliki CLI? Jika ya, tolong, beri tahu saya!
TomCho

Tidak ada dukungan untuk aplikasi di Debian 9 apt. Ada yang datang? - - Anda dapat menginstal aplikasi dengan petunjuk ini tagspaces.org/products
Léo Léopold Hertz 준영

Bisakah Anda membandingkan proposal Anda dengan Alat Pencarian Desktop Linux?
Léo Léopold Hertz 준영

5

Anda mungkin tidak perlu menginstal seluruh desktop KDE untuk pustaka penandaan mereka, Nepomuk. Anda masih harus menginstal pustaka dasar KDE, meskipun ...


1
ya baik saya berharap untuk menemukan sebuah alternatif untuk ini, tetapi tidak terlihat begitu ...
julien

2

Artikel terbaru tentang Linux Desktop Search Tools menyebutkan bahwa Tracker mendukung penandaan. Sayangnya itu seharusnya setengah rusak di versi lama yang mereka uji. Mungkin sudah diperbaiki sekarang?

  1. Tidak lebar sistem.
  2. Anda dapat mencadangkannya.
  3. Ini dibundel dengan Gnome.

2

Coba Beagle . Saya merasa cukup bagus.

Mungkin tidak memenuhi semua persyaratan, dan saya tidak yakin apa yang bisa. Misalnya, apakah file FIFO mendukung atribut yang diperluas? Jika tidak, Beagle memiliki database cadangan.


Bisakah beagle menangani file tidak biasa?
Charles Stewart

@ Charles Stewart - maksud Anda file non-teks?
pcapademic

Tidak, maksud saya file perangkat, symlink, FIFOs, & c
Charles Stewart

Tautan itu tidak merujuk ke proyek tentang organisasi dokumen.
detly



1

Jadi Anda tidak akan menemukan integrasi Nepomuk di gnome, di baris perintah, atau di tempat lain di Linux.

Sebaliknya, dengan Pelacak Anda tidak akan menemukan integrasi kde AFAIK. Tidak yakin tentang CLI.

Jadi sayangnya, jawabannya tampaknya "tidak".

Yang lebih sayangnya, ini tidak berarti ada peluang bagus untuk membangunnya. Utilitas Linux commandline tidak memiliki banyak kesamaan dengan manajer file GUI, misalnya, jadi secara arsitektur tidak ada komponen umum yang dapat diperluas untuk mendukung konsep.


0

Saya membuat program kecil yang menggunakan SQLite untuk tujuan ini. Itu menyelesaikan kebutuhan saya, tapi mungkin itu membantu Anda juga:

https://github.com/alvatar/dfym

Satu-satunya masalah dengan pendekatan ini adalah yang tidak disinkronkan dengan gerakan dan penghapusan, tetapi itu memecahkan masalah untuk file yang relatif statis.


0

TMSU

TMSU adalah alat untuk menandai file Anda. Ini memberikan utilitas baris perintah sederhana untuk menerapkan tag dan sistem file virtual untuk memberi Anda tampilan berbasis tag dari file Anda dari program lain.

TMSU tidak mengubah file Anda dengan cara apa pun: mereka tetap tidak berubah pada disk, atau di jaringan, di mana pun Anda meletakkannya. TMSU memelihara basis datanya sendiri dan Anda hanya mendapatkan tampilan tambahan, yang bisa Anda pasang di tempat yang Anda suka, berdasarkan tag yang Anda buat.

Terkejut tidak ada yang menyebutkannya.


1
Anda melewatkannya ... itu jawaban pilihan tertinggi
ikan buntal

-1

Saya sarankan untuk melihat sistem kontrol versi seperti Subversion untuk jenis-jenis fitur di atas dan di luar sistem file. Beberapa mungkin lebih cocok untuk Anda daripada yang lain tetapi umumnya:

  • Banyak penandaan dukungan (tentu subversi).
  • Banyak yang lintas platform; Windows, Mac, Linux, hampir semua Unix.
  • Banyak yang memiliki ujung depan GUI dan klien baris perintah.
  • Banyak yang sudah memiliki binding untuk bahasa pemrograman / scripting favorit Anda.
  • Banyak yang dengan mudah dicadangkan.
  • Banyak yang dirancang agar mudah dibagikan dengan satu atau lain cara.
  • Banyak yang memungkinkan Anda untuk mengontrol akses.
  • Anda tidak perlu menemukan kembali roda.
    • Anda belajar dan menggunakan perintah / alat standar yang sudah digunakan oleh jutaan orang.
  • Anda dapat menginstalnya hari ini untuk repo OS favorit Anda; apt-get install, yum install
  • Anda juga mendapatkan manajemen versi "gratis".

Contoh cli dengan 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

Saya tidak akan merekomendasikan alat ini untuk besar (ukuran gigabyte) secara teratur mengubah file biner tetapi untuk semua yang lain mereka sudah terbukti dengan baik dan skala ke ukuran yang sangat besar.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.