리눅스에서 파일 태깅을위한 좋은 해결책은 무엇입니까? [닫은]


71

파일에 태그를 지정하고 해당 태그를 기반으로 파일을 검색 / 필터링하는 방법을 찾고있었습니다.

내 ( 업데이트 된 ) 요구 사항 은 다음과 같습니다 .

  • 사용자가 읽을 수있는 모든 파일에 자유롭게 태그를 지정할 수 있습니다
  • 사용자는 하나 또는 여러 개의 태그와 일치하는 파일을 검색 할 수 있습니다
  • 이전에 연결된 태그를 잃지 않고 파일을 이동할 수 있습니다
  • 시스템을 쉽게 백업 할 수 있습니다
  • 데스크탑 환경에 대한 의존성이 없음
  • 어떤 GUI가 관련되어 있다면 cli fallback이 있어야합니다.

나는 이것을 처리하기 위해 기본 파일 시스템 및 coreutils 해커가 있기를 바랐지만 아직 충분히 열심히 생각하지 못했습니다.
한편 나는 여기에 언급 된 비글과 메타 트래커를 검토하고 이들이 어떻게 작동하는지 살펴 보겠습니다.


비글에는 큰 그놈 의존성이 있고 추적기는 괜찮지 만 여전히 좋아하지 않는 의존성이 있습니다 ...

더 많은 연구를 해왔으며 진행 방법은 확장 된 파일 속성 일 수 있습니다.
그것은 가장 최근의 파일 시스템에 대한 기본 솔루션이지만 아직 잘 지원되지는 않습니다 (대부분의 coreutils는 기본적으로 파일을 파괴합니다. 예를 들어 cp는 파일을 보존하려면 -a 플래그가 필요합니다). 새로운 질문이 필요할 수도 있지만 해킹을 직접 시도하는 동안 사용에 대한 의견을 듣고 싶습니다.


2
확장 된 파일 속성 관련 문제 : (i) 내 경험상 백업 할 때 귀찮습니다. (ii) 파일 시스템간에 이동할 때는 사용할 수 없습니다. 그 외에도 그들은 옳은 일이 될 것입니다.
Charles Stewart


PC-BSD 포럼에서이 질문의 2010 년판을 참조하십시오 : PC-BSD, 확장 된 속성 및 태깅; OpenMeta와 Apple의 접근
Graham Perrin

답변:


13

어떤 종류의 검색을 원하는지 명확하지 않습니다. 홈 디렉토리가 아닌 유닉스의 어느 곳에서나 작동하고 경로 이름 기반 검색 만 수행하려는 경우 약간의 쉘 해커를 사용하고 표준을 사용하여 다음 구성표를 사용할 수 있습니다 locatedb.

  1. 태그가 지정된 파일을 하나 이상 포함하는 각 디렉토리에는 표준 하위 디렉토리가 필요합니다 .path-tags.
  2. $ TAG 링크 (char 포함하지 않아야 함 _)가있는 $ FILE 디렉토리의 각 파일에는 링크가 있습니다.$TAG_$FILE -> ../$FILE

나는 locate-tag대본 의 세부 사항 을 당신에게 맡깁니다. locate명령 및 셸 해커 만 사용하는 2 개 또는 3 개의 라이너 여야합니다 . (관심이 있으시면 하나 쓸 수 있습니다).

KDE 챕터 중 일부는 메타 데이터에 대한 이러한 종류의 체계에 대해 이야기했지만 세부 사항은 기억 나지 않습니다.

이 체계를 기반으로 유사한 스크립트를 사용하여보다 정교한 컨텐츠 검사 테스트를 수행 할 수도 있습니다 find.

업데이트 된 요구 사항에 대한 생각

  1. 사용자가 읽을 수있는 모든 파일에 자유롭게 태그를 지정할 수 있습니다 -예, 문제 없습니다
  2. 사용자는 하나 이상의 태그와 일치하는 파일을 검색 할 수 있습니다 -마찬가지로
  3. 이전에 연결된 태그를 잃지 않고 파일을 이동할 수 있습니다. 파일이있는 디렉토리는 자유롭게 이동할 수 있지만 파일이 디렉토리에서 이동하면 문제가 발생합니다. 태그가 양식을했다 경우 $TAG_$INODE_$FILE우리는이 경로가 주어진 아이 노드를 찾을 수있는 효율적인 방법을 , 우리는 우리가 파일 시스템에서 이동하는 경우에만 태그를 잃고,이 작업을 수행 할 수 있습니다. 파일을 복사하면 문제가 발생할 수 있으며 원래 제안보다 훨씬 더 복잡합니다.
  4. 시스템을 쉽게 백업 할 수 있습니다 . 본질적으로 어렵지는 않습니다.
  5. 데스크탑 환경에 대한 종속성 없음-없음
  6. 어떤 GUI가 관련되어 있다면, cli fallback이 있어야합니다 – 그것이 우리가 사는 곳입니다!

Postscript 링크 (2)에 설명 된 "reverse-inode-lookup"파일은 (1) 에 대한 답변에서 나에게 보여준 추가 인프라를 제공하는 데 사용될 수 있습니다. 역방향 조회 파일에서 서비스를 실행할 수 있습니다.이 파일은 태그의 파일 이름에 지정된 각 inode가 태그가 가리키는 파일 (있는 경우)의 inode와 일치하는지 확인합니다. 일치하는 것이 없으면 필요한 수술을 수행 할 수 있으며 (아이 노드가 여전히 존재합니까? 어디에 있습니까?) 역방향 조회 파일이 변경되거나 재생성되고 태그 심볼릭 링크가 업데이트됩니다.

까다로운 한 가지 사례가 있습니다. 태그 된 파일이 태그가 말한 곳에 없으면 역방향 조회 파일이 여전히 존재한다고 말하지만 탕자 파일이 조회 파일의 위치가 아니라는 것입니다. 데이트? 이 경우를 처리 할 수있는 몇 가지 방법이 있지만 이상적인 것은 아닙니다. 이 외에도이 모든 작업은 Perl이 잘 어울리는 것 같습니다 ...


1
이것은 좋으며 심볼릭 링크를 사용하는 것에 대해서도 생각했습니다. 문제는 태그를 잃지 않고 파일을 이동할 수 없다는 것입니다. 이상적으로, 태그는 경로에 구애받지 않고 태그를 검색하면 죽은 심볼릭 링크가 아닌 실제 파일을 반환해야합니다 ... PS : 나는 쉘 기반 솔루션을위한 것이지만 문제가있는 도메인은 그렇게 생각합니다. 쉘 스크립트를 통해서만 유지하는 것은 매우 고통 스러울 것입니다. 누군가가 나를 잘못 증명했으면합니다.
Julien

나는 어떤 종류의 솔루션을 찾고 있는지 명확하게하기 위해 내 질문을 편집했습니다. 건배
Julien

젠장, 파일에 대한 지속적인 안내와 같은 inode가 생각할 음식이라는 것을 결코 깨닫지 못했습니다!
줄리앙

1
inode는 uid이지만 주어진 fs에 ​​묶여 있으므로 guid가 아닙니다. 복사, 백업, 아카이빙 및 & c는 파일이 다른 파일에 복제되어 저장되고 fs 상태가 결과를 분리하기에 충분한 정보를 제공하기를 원하기 때문에 나쁘지 않습니다.
찰스 스튜어트

1
나는 펀치 라인을 놓쳤다. 어떤 소프트웨어가 이것을 수용 할 수 있는가? 본인의 인프라를 작성하지 않고도 부담없이 사용할 수있는 것을 기대하고있었습니다. (그러나 원할 때 직접 확장 할 수 있도록 일반)
ThorSummoner

22

방금이 기능을 제공하려는 새 프로그램의 알파를 출시했습니다. 현재 귀하의 요구 사항 중 일부만 충족합니다. 어쨌든 관심이있을 수 있습니다. 태그 지정을위한 명령 줄 도구와 탐색을위한 가상 파일 시스템 (태그가 디렉토리로 표시됨)을 제공합니다.

http://www.tmsu.org/

사용자가 읽을 수있는 모든 파일에 자유롭게 태그를 지정할 수 있습니다

예.

사용자는 하나 또는 여러 개의 태그와 일치하는 파일을 검색 할 수 있습니다

예. 명령 행 도구를 통해 또는 가상 파일 시스템에서 태그 디렉토리를 찾아보십시오.

이전에 연결된 태그를 잃지 않고 파일을 이동할 수 있습니다

그러나 응용 프로그램은 이동 된 파일을 식별하는 데 사용되는 태그가 지정된 파일의 지문을 저장합니다. 이동 된 파일의 경로를 업데이트하는 '복구'명령이 제공됩니다. 파일이 이동되고 수정되면이 메커니즘이 작동하지 않습니다.

시스템을 쉽게 백업 할 수 있습니다

예. 간단한 Sqlite 3 데이터베이스 파일입니다.

데스크탑 환경에 대한 의존성이 없음

예. 종속성이 없으며 가상 파일 시스템으로 실행할 수 있으므로 기호 링크를 지원하는 모든 프로그램에서 파일 시스템으로 사용할 수 있습니다.

어떤 GUI가 관련되어 있다면 cli fallback이 있어야합니다.

현재 GUI가 없습니다.


매우 흥미로운 것 같습니다. 관련 태그를 잃지 않고 파일을 이동할 수있는 가능성을 구현하는 방법을 알고 있습니까?
학생

@student : 현재 이동 및 수정 된 파일을 처리하는 '복구'명령이 있습니다. (그러나 파일을 이동하고 수정하면 감지되지 않습니다.)
Paul Ruane

아마도 하나의 변종을 쓸 수 mv, cp그리고 rm어떤뿐만 아니라 태그를 처리 (예를 들어 그들에게 전화 tmv, tcp그리고 trm... 하나 주위에 파일을 이동하려면 명령 줄을 사용하여 적어도이라면 하나의 태그를 잃지 않을 것입니다)
학생

@student TMSU 이제 최신 데이터베이스를 유지하는 동안 파일 시스템 작업을 수행하는 몇 가지 스크립트를 포함 tmsu-fs-mv, tmsu-fs-rmtmsu-fs-merge.
Paul Ruane

내 질문을 실례하지만 ... ¿ 파일을 자동으로 이동할 때 단순히 태그를 복제하지 않는 이유는 무엇입니까? 이동할 때 파일을 수동으로 업데이트해야합니까?
erm3nda

6

이것이 모든 요구 사항을 충족시킬 있다고 생각합니다 . 어쨌든 멋진 코드입니다.

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

GUI에는 Qt가 필요하지만 검색을위한 명령 줄 응용 프로그램이 있으며 모든 태그가 실제로 파일 이름에 있다는 사실은 cli에서 태그 | 파일을 조작하는 것이 쉽지 않습니다.


1
페이지에서 : "태그 정보는 파일 이름에 저장됩니다"-태그가있는 파일 이름은 어떻게 생깁니 까? BTW, 해당 페이지의 링크는 매우 흥미 롭습니다 : +1.
Charles Stewart

보고-FOR-법안 [내가 제작 한 작품 물건, 시간,] .ODT은
laramichaels

@laramichaels 나는 이것이 꽤 오래되었다는 것을 알고 있지만 접근 방식이 매우 흥미 롭습니다. 문서가 부족하지 않은 경우 (파일 이름 지정 방법에 대한 설명이없는 곳) 채택 할 것입니다. 이러한 도구에 대한 뉴스가 있으면 알려주십시오.
TomCho

6

아무도 언급하지 않았지만 확장 파일 시스템 속성을 반드시 확인해야합니다. 예를 들어 ext4에 있습니다. getfattr과 setfattr을 다루는 도구가 있습니다. 물론 일부 태그가 지정된 파일을 검색하려면 일부 쉘 스크립트를 작성해야합니다. 언급 된 질문과 관련하여 모든 대답은 "예"입니다. 파일 시스템에 의존한다는 점만 고려해야합니다.


파일의 아이 노드 데이터는 정의 적으로 ext4 fs에서이를 수행하는 올바른 방법이어야하지만 이전 버전과의 호환성은 제공하지 않습니다. 권리?
erm3nda

6

아무도 TagSpaces 를 언급하지 않은 것으로 놀랐습니다 . 태그는 파일 이름에 저장되고 TagSpaces는 크로스 플랫폼이기 때문에 모든 요구 사항을 충족합니다.

TagSpaces


1
태그 공간에는 CLI 대체가 없으므로 모든 요구 사항을 충족하지는 않습니다. 아니면 CLI가 있습니까? 그렇다면 알려주세요!
TomCho

Debian 9 apt에서는 응용 프로그램을 지원하지 않습니다. 무슨 일 있어요? --다음 지침에 따라 앱을 설치할 수 있습니다. tagspaces.org/products
Léo Léopold Hertz 준영

제안을 Linux 데스크톱 검색 도구와 비교할 수 있습니까?
Léo Léopold Hertz 준영

5

태그 라이브러리 인 Nepomuk를 위해 KDE 데스크탑 전체를 설치할 필요는 없습니다. 그래도 KDE 기본 라이브러리를 설치해야합니다.


1
그래, 난 이것에 대한 대안을 찾고
싶었지만

2

Linux 데스크톱 검색 도구 에 대한이 최신 기사에서는 트래커 가 태그 지정을 지원 한다고 언급합니다 . 불행히도 테스트 한 이전 버전에서는 절반으로 떨어졌습니다. 아마 지금 고쳐 졌나요?

  1. 시스템 전체가 아닙니다.
  2. 백업 할 수 있습니다.
  3. 그놈과 함께 제공됩니다.

2

비글을 사용해보십시오 . 나는 그것이 꽤 좋다는 것을 알았다.

모든 요구 사항을 충족하지 못할 수 있으며 무엇을 할 수 있는지 잘 모르겠습니다. 예를 들어 FIFO 파일이 확장 된 속성을 지원합니까? 그렇지 않은 경우 Beagle 에는 대체 데이터베이스가 있습니다.


비글이 비정규 파일을 처리 할 수 ​​있습니까?
Charles Stewart

@Charles Stewart-텍스트가 아닌 파일을 의미합니까?
pcapademic

아니요, 장치 파일, 심볼릭 링크, FIFO 및 & c를 의미합니다
Charles Stewart

이 링크는 문서 구성에 관한 프로젝트를 언급하지 않습니다.
detly



1

따라서 gnome, 명령 행 또는 Linux의 다른 곳에서는 Nepomuk 통합을 찾을 수 없습니다.

반대로, 트래커를 사용하면 kde 통합 AFAIK를 찾을 수 없습니다. CLI에서 확실하지 않습니다.

불행히도 대답은 "아니오"인 것으로 보입니다.

더 안타깝게도 이것이 하나를 만들 수있는 좋은 기회가 있다는 의미는 아닙니다. 예를 들어 Linux 명령 줄 유틸리티는 GUI 파일 관리자와 공통점이 많지 않으므로 개념적으로 지원하도록 확장 할 수있는 공통 구성 요소가 없습니다.


0

이 목적으로 SQLite를 사용하는 작은 프로그램을 만들었습니다. 그것은 내 필요를 해결했지만 어쩌면 당신에게도 도움이 될 것입니다.

https://github.com/alvatar/dfym

이 방법의 유일한 문제는 이동 및 삭제와 동기화되지 않지만 비교적 정적 파일의 문제를 해결한다는 것입니다.


0

TMSU

TMSU는 파일에 태그를 지정하는 도구입니다. 태그 및 가상 파일 시스템을 적용하여 다른 프로그램의 파일을 태그 기반으로 볼 수있는 간단한 명령 줄 유틸리티를 제공합니다.

TMSU는 파일을 어떤 식 으로든 변경하지 않습니다. 파일은 디스크 나 네트워크에 배치 한 위치에 관계없이 변경되지 않습니다. TMSU는 자체 데이터베이스를 유지 관리하기 때문에 설정 한 태그를 기반으로 원하는 위치에 마운트 할 수있는 추가 뷰를 얻을 수 있습니다.

아무도 언급하지 않은 것에 놀랐습니다.


1
당신은 그것을 놓쳤다 ... 그것은 가장 높은 투표 답변
복어

-1

파일 시스템 위와 그 밖의 기능에 대해서는 Subversion과 같은 버전 제어 시스템을 살펴 보는 것이 좋습니다. 일부는 다른 사람보다 귀하에게 더 적합 할 수 있지만 일반적으로 다음과 같습니다.

  • 많은 태그 지원 (확실히 전복).
  • 많은 사람들이 크로스 플랫폼입니다. Windows, Mac, Linux, 거의 모든 유닉스.
  • 많은 GUI 프런트 엔드와 명령 줄 클라이언트가 있습니다.
  • 많은 사람들이 이미 좋아하는 프로그래밍 / 스크립트 언어에 대한 바인딩을 가지고 있습니다.
  • 많은 사람들이 쉽게 백업됩니다.
  • 많은 사람들이 어떤 방식 으로든 쉽게 공유 할 수 있도록 설계되었습니다.
  • 많은 사람들이 액세스를 제어 할 수 있습니다.
  • 휠을 다시 발명 할 필요는 없습니다.
    • 이미 수백만 명이 사용하는 표준 명령 / 도구를 배우고 사용합니다.
  • 좋아하는 OS 저장소를 위해 오늘 설치할 수 있습니다. apt-get 설치, yum 설치
  • "무료"버전 관리도 제공됩니다.

Subversion의 cli 예제 : ~/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

이 도구는 이진 파일을 정기적으로 변경하는 큰 (기가 바이트 크기) 도구이지만 다른 모든 도구의 경우 이미 잘 입증되어 있으며 매우 큰 크기로 확장하는 것이 좋습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.