用标签视图管理文件(gmail的label思路){非技术}{分享}

4 views
Skip to first unread message

张慧聪

unread,
Nov 8, 2009, 11:28:25 PM11/8/09
to sz...@googlegroups.com, 王辉
周末做了一个小东西,可以在*nix下面通过标签视图管理文件,这里发给大家,欢迎拍砖;-)
附上一段Readme,好让大家大概了解它的功能。
--------------------
欢迎使用tagit!

==介绍==
"tagit"是一个文件管理工具。
通常,文件系统是树状结构的,我们用目录来对文件进行分类。但一个文件可能会有很多属性。例如,你有一个">音乐"目录,然后你下载了一首歌,Yesterday.mp3。那么应该把它放到哪个子目录下呢?"MP3","披头士","1960年代",还是"摇滚"?对于其他类型的文件,你会遇到同样的问题。
"tagit"给出了一个解决方案。类似gmail中的label功能,tagit允许你为任意普通文件打上标签(目录文件现在还>不支持),然后你就可以在标签视图中来管理它们

==基本使用==
为一个文件file增加一个tag:

$tagit filename tagname

你可以一次为多个文件增加同一个tag:

$tagit file1 file2 ... tagname
$tagit *.c c_code
$tagit *.mp3 *.wma *.ogg audio

删除tag:

$tagit -d tagname1 tagname2 ...

从一个tag中删除文件:

$tagit -c tagname file1 file2 ...

PS:自知英文水平比较挫,如果有感兴趣的好人,希望能帮我改改英文Readme.txt

tagit_1.0.tar.gz

Zoom.Quiet

unread,
Nov 8, 2009, 11:50:43 PM11/8/09
to sz...@googlegroups.com, 王辉
2009/11/9 张慧聪 <zhcfr...@gmail.com>:

> 周末做了一个小东西,可以在*nix下面通过标签视图管理文件,这里发给大家,欢迎拍砖;-)
> 附上一段Readme,好让大家大概了解它的功能。

整到 code.google 中持续修订吧,也好统一收集反馈/缺陷什么的...

> --------------------
> 欢迎使用tagit!
>
> ==介绍==
> "tagit"是一个文件管理工具。
> 通常,文件系统是树状结构的,我们用目录来对文件进行分类。但一个文件可能会有很多属性。例如,你有一个">音乐"目录,然后你下载了一首歌,Yesterday.mp3。那么应该把它放到哪个子目录下呢?"MP3","披头士","1960年代",还是"摇滚"?对于其他类型的文件,你会遇到同样的问题。
> "tagit"给出了一个解决方案。类似gmail中的label功能,tagit允许你为任意普通文件打上标签(目录文件现在还>不支持),然后你就可以在标签视图中来管理它们
>
> ==基本使用==
> 为一个文件file增加一个tag:
>
> $tagit filename tagname
>
> 你可以一次为多个文件增加同一个tag:
>
> $tagit file1 file2 ... tagname
> $tagit *.c c_code
> $tagit *.mp3 *.wma *.ogg audio
>
> 删除tag:
>
> $tagit -d tagname1 tagname2 ...
>
> 从一个tag中删除文件:
>
> $tagit -c tagname file1 file2 ...
>
> PS:自知英文水平比较挫,如果有感兴趣的好人,希望能帮我改改英文Readme.txt
>
>

--
http://zoomquiet.org 人生苦短? Pythonic!
一个人如果力求完善自己,就会看到:为此也必须同时完善他人. 一个人如果不关心别人的完善,自己便不可能完善!

Zoom.Quiet

unread,
Nov 8, 2009, 11:53:19 PM11/8/09
to sz...@googlegroups.com
2009/11/9 Zoom.Quiet <zoom....@gmail.com>:

> 2009/11/9 张慧聪 <zhcfr...@gmail.com>:
>> 周末做了一个小东西,可以在*nix下面通过标签视图管理文件,这里发给大家,欢迎拍砖;-)
>> 附上一段Readme,好让大家大概了解它的功能。
>
> 整到 code.google 中持续修订吧,也好统一收集反馈/缺陷什么的...
>
看了一下代码,这种小应用使用 Python 不是更加通用?

>> --------------------
>> 欢迎使用tagit!
>>
>> ==介绍==
>> "tagit"是一个文件管理工具。
>> 通常,文件系统是树状结构的,我们用目录来对文件进行分类。但一个文件可能会有很多属性。例如,你有一个">音乐"目录,然后你下载了一首歌,Yesterday.mp3。那么应该把它放到哪个子目录下呢?"MP3","披头士","1960年代",还是"摇滚"?对于其他类型的文件,你会遇到同样的问题。
>> "tagit"给出了一个解决方案。类似gmail中的label功能,tagit允许你为任意普通文件打上标签(目录文件现在还>不支持),然后你就可以在标签视图中来管理它们
>>
>> ==基本使用==
>> 为一个文件file增加一个tag:
>>
>> $tagit filename tagname
>>
>> 你可以一次为多个文件增加同一个tag:
>>
>> $tagit file1 file2 ... tagname
>> $tagit *.c c_code
>> $tagit *.mp3 *.wma *.ogg audio
>>
>> 删除tag:
>>
>> $tagit -d tagname1 tagname2 ...
>>
>> 从一个tag中删除文件:
>>
>> $tagit -c tagname file1 file2 ...
>>
>> PS:自知英文水平比较挫,如果有感兴趣的好人,希望能帮我改改英文Readme.txt
>>
>>
>
>
>
> --
> http://zoomquiet.org 人生苦短? Pythonic!
> 一个人如果力求完善自己,就会看到:为此也必须同时完善他人. 一个人如果不关心别人的完善,自己便不可能完善!
>

--
http://zoomquiet.org 人生苦短? Pythonic!

流程是对先前蠢行的内在反应! ~ Clay Shirky (Process is an embedded reaction to prior
stupidity)http://bit.l...

DNA24

unread,
Nov 9, 2009, 4:33:38 AM11/9/09
to 深圳 Linux Unix 用户组
咯咯,不错的东东,
tagit后,如何把同tag文件放在指定的目录中?

张慧聪

unread,
Nov 9, 2009, 7:51:26 AM11/9/09
to sz...@googlegroups.com
2009/11/9 DNA24 <slevi...@gmail.com>
咯咯,不错的东东,
tagit后,如何把同tag文件放在指定的目录中?
啊,它的实现其实思路非常简单,就是硬链接,这个问题可以看Readme里如何操作文件那一节。不过其实最关键的功能没有实现,那就是一个shell,就是提供一个界面,完全是tag视图

@zoomq这还仅仅是个原型,所以用shell快速地搞出来了(虽然我也花了很久,因为对shell不太熟),而且如果用硬链来实现,没发现py有什么优势。再做得好一些时会放到网上去。

Zoom.Quiet

unread,
Nov 9, 2009, 7:54:06 AM11/9/09
to sz...@googlegroups.com
2009/11/9 张慧聪 <zhcfr...@gmail.com>:

使用硬链接的话,系统依赖性太大了,而且无法快速自动统计和修订关联的分类哪...
这类工具,关键就是如何实现 "tag" 视图...

--
http://zoomquiet.org 人生苦短? Pythonic!

向靠谱,反脑残! Kaopulity,小白退散! [Kaopulity~= Keep all processes usablity!]

Zhang Le

unread,
Nov 9, 2009, 10:45:46 AM11/9/09
to sz...@googlegroups.com
2009/11/9 张慧聪 <zhcfr...@gmail.com>:

> 2009/11/9 DNA24 <slevi...@gmail.com>
>>
>> 咯咯,不错的东东,
>> tagit后,如何把同tag文件放在指定的目录中?
>
> 啊,它的实现其实思路非常简单,就是硬链接

那天你问我硬连接的问题,我碰巧不在
在这里回答一下吧
据我所知,知道一个文件,操作系统本身似乎不提供反查所有指向它的硬连接的机制


--
Zhang Le, Robert
Gentoo/Loongson(龙芯) Developer
http://zhangle.is-a-geek.org

张慧聪

unread,
Nov 9, 2009, 6:59:51 PM11/9/09
to sz...@googlegroups.com
2009/11/9 Zhang Le <robert....@gmail.com>

>
> 啊,它的实现其实思路非常简单,就是硬链接

那天你问我硬连接的问题,我碰巧不在
在这里回答一下吧
据我所知,知道一个文件,操作系统本身似乎不提供反查所有指向它的硬连接的机制

哦,真遗憾,这样就麻烦得多了,谢谢:-)

Zhang Le

unread,
Nov 9, 2009, 8:13:34 PM11/9/09
to sz...@googlegroups.com
2009/11/10 张慧聪 <zhcfr...@gmail.com>:

> 2009/11/9 Zhang Le <robert....@gmail.com>
>>
>> >
>> > 啊,它的实现其实思路非常简单,就是硬链接
>>
>> 那天你问我硬连接的问题,我碰巧不在
>> 在这里回答一下吧
>> 据我所知,知道一个文件,操作系统本身似乎不提供反查所有指向它的硬连接的机制
>>
> 哦,真遗憾,这样就麻烦得多了,谢谢:-)

昨天碰巧看内核vfs部分代码,想起来在struct inode里有个
struct list_head i_dentry:
这个是所有指向这个inode的dentry的链表头

可惜这个东西似乎没有用户层接口可以获得

Zoom.Quiet

unread,
Nov 9, 2009, 8:14:01 PM11/9/09
to sz...@googlegroups.com
2009/11/10 张慧聪 <zhcfr...@gmail.com>:

> 2009/11/9 Zhang Le <robert....@gmail.com>
>>
>> >
>> > 啊,它的实现其实思路非常简单,就是硬链接
>>
>> 那天你问我硬连接的问题,我碰巧不在
>> 在这里回答一下吧
>> 据我所知,知道一个文件,操作系统本身似乎不提供反查所有指向它的硬连接的机制
>>
> 哦,真遗憾,这样就麻烦得多了,谢谢:-)

想起来 Emacs 的 org_mod 天然的有这种功能哪,,,
看一下是否也是可以和真实文件绑定关系的?

--
http://zoomquiet.org 人生苦短? Pythonic!

Free as in Freedom! 哲思社区:http://zeuux.com

Cheng Renquan

unread,
Nov 9, 2009, 8:37:24 PM11/9/09
to sz...@googlegroups.com, Zhang Le, 张慧聪
2009/11/10 张慧聪 <zhcfr...@gmail.com>:
> 2009/11/9 Zhang Le <robert....@gmail.com>
>> 据我所知,知道一个文件,操作系统本身似乎不提供反查所有指向它的硬连接的机制
> 哦,真遗憾,这样就麻烦得多了,谢谢:-)

操作系统是没有直接提供这样的系统调用,但是有工具提供了

如, ls -li 发现某文件的 硬链接号码是 2046
$ ls -li
2046 -rw-r--r-- 1 user user 0 2009-08-11 21:49 res.db

我们硬链接文件在文件系统层次的实现原理就是使用不同的 dir entry, 而其 inode 和数据部分只有一份, 也就是其号码都是相同的,

使用 find 可以找出, 同一文件的所有硬链接;
$ find -inum 2046 -ls
1046 0 -rw-r--r-- 1 user user 0 8月 11 21:49 ./res.db
1046 0 -rw-r--r-- 1 user user 0 8月 11 21:49 ./tmp/res.db

只不过 find 的实现原理还是 递归遍历, 对 inum 进行判断,这样显然当文件数很多时,就会慢了;


BTW, 这个 find 命令通过inum查找通常还被用于一个用途:
就是删除有特殊字符文件名的文件, 如某文件含有特殊文件名时在 ls 列表中会显示成为一系列 ? 问号, 直接 rm 这些问号名的文件会提示
no such file; 这时解决方法就是 先 "ls -li" 列表找出它的 inode number, 再 find 删除:
$ find -inum <number> -delete

张慧聪

unread,
Nov 10, 2009, 12:07:46 AM11/10/09
to Cheng Renquan, sz...@googlegroups.com, Zhang Le
2009/11/10 Cheng Renquan <crq...@gmail.com>
2009/11/10 张慧聪 <zhcfr...@gmail.com>:
> 2009/11/9 Zhang Le <robert....@gmail.com>
>> 据我所知,知道一个文件,操作系统本身似乎不提供反查所有指向它的硬连接的机制

操作系统是没有直接提供这样的系统调用,但是有工具提供了

如, ls -li 发现某文件的 硬链接号码是 2046
$ ls -li
2046 -rw-r--r-- 1 user user        0 2009-08-11 21:49 res.db

我们硬链接文件在文件系统层次的实现原理就是使用不同的 dir entry, 而其 inode 和数据部分只有一份, 也就是其号码都是相同的,

使用 find 可以找出, 同一文件的所有硬链接;
$ find -inum 2046 -ls
 1046    0 -rw-r--r--   1 user     user            0  8月 11 21:49 ./res.db
 1046    0 -rw-r--r--   1 user     user            0  8月 11 21:49 ./tmp/res.db

哦,这样啊,既然如此那就有手段了,多谢
只不过 find 的实现原理还是 递归遍历, 对 inum 进行判断,这样显然当文件数很多时,就会慢了;
没事,按现在的需求的用法,看起来还不会很慢,如果慢了再想别的办法。


BTW, 这个 find 命令通过inum查找通常还被用于一个用途:
就是删除有特殊字符文件名的文件, 如某文件含有特殊文件名时在 ls 列表中会显示成为一系列 ? 问号, 直接 rm 这些问号名的文件会提示
no such file; 这时解决方法就是 先 "ls -li" 列表找出它的 inode number, 再 find 删除:
$ find -inum <number> -delete
这个嘛,如果只有一两个文件,其实你打\?也可以的,或者用*什么的匹配文件名的非乱码部分就行了,或者用[!a-zA-Z]*什么的

嗯,感谢乐兄和任全兄的回复:-)

Cheng Renquan

unread,
Nov 10, 2009, 2:23:19 AM11/10/09
to 张慧聪, sz...@googlegroups.com, Zhang Le
2009/11/10 张慧聪 <zhcfr...@gmail.com>:

>> BTW, 这个 find 命令通过inum查找通常还被用于一个用途:
>> 就是删除有特殊字符文件名的文件, 如某文件含有特殊文件名时在 ls 列表中会显示成为一系列 ? 问号, 直接 rm 这些问号名的文件会提示
>> no such file; 这时解决方法就是 先 "ls -li" 列表找出它的 inode number, 再 find 删除:
>> $ find -inum <number> -delete
>
> 这个嘛,如果只有一两个文件,其实你打\?也可以的,或者用*什么的匹配文件名的非乱码部分就行了,或者用[!a-zA-Z]*什么的

不是的,你没有理解我说的情况。打 \? 删除的是准确的名字叫做?的文件,

而实际上在远程服务器上(没有图形界面去方便的选择并删除)
有一些完全外国字文件名的文件(没有非乱码部分)、比如中文文件名在阿拉伯文的操作系统上就显示为一列 ???? 同样阿拉伯文的 文件名在中文
locale 系统上也显示为 一列问号,而且这个目录中的各式样文件名非常多,很难使用正则表达式去唯一的只匹配它这一个;这时使用 find
inum 方法删除会比较安全有效;

>
> 嗯,感谢乐兄和任全兄的回复:-)

--
Cheng Renquan

张慧聪

unread,
Nov 10, 2009, 5:49:00 AM11/10/09
to Cheng Renquan, sz...@googlegroups.com, Zhang Le
我说的就是少的情况啊,不是说如果一两的的话么。我试过的,由于乱码导致的?也是可以用\?来搞定的,当然了,要加tab来补全,如果多的话就会把所有乱码的都匹配上

2009/11/10 Cheng Renquan <crq...@gmail.com>

张慧聪

unread,
Nov 10, 2009, 5:52:51 AM11/10/09
to sz...@googlegroups.com
2009/11/10 Zoom.Quiet <zoom....@gmail.com>

想起来 Emacs 的 org_mod 天然的有这种功能哪,,,
看一下是否也是可以和真实文件绑定关系的?

你说的是不是这个?
http://orgmode.org/
似乎没看出关系来
Reply all
Reply to author
Forward
0 new messages