继续在 Linux 世界里找东西


tux2上一篇.

对于新手老手, 都有一些文件是要找的. 自己的脑子永远不会比一块几百元的硬盘更方便存东西, 所以与其记住每个文件在哪, 不如记住如何找到这些文件. 当然, 养成一个一致的文件存放习惯也很有帮助.

找不常更改的系统文件, 例如某个命令的”真身”位置, 我一般用 locate 命令. Locate 命令是从有索引的数据库里搜索匹配的文件, 所以速度最快. 但有可能数据库更新的不够及时, 也就是说数据库里搜到的文件实际在磁盘上可能不存在了. 因此我不推荐使用 locate 来搜索经常更改的用户文档. 使用方法很简单, 例如我要找 lsb-release (LSB = Linux Standard Base):

~ locate lsb-release
/etc/lsb-release
/usr/share/bug/lsb-release
/usr/share/doc/lsb-release
/usr/share/doc/lsb-release/README.Debian
/usr/share/doc/lsb-release/changelog.Debian.gz
/usr/share/doc/lsb-release/copyright
/var/lib/dpkg/info/lsb-release.list
/var/lib/dpkg/info/lsb-release.md5sums
/var/lib/dpkg/info/lsb-release.postinst
/var/lib/dpkg/info/lsb-release.postrm
/var/lib/dpkg/info/lsb-release.prerm

输入 locate file, 那么 locate 会自动按照 *file* 的规则来查找, 也就是说任何包含 file 的文件以及文件夹都会被搜出来的.

一个更强力的命令是 find, 比起 locate, find 是实实在在的在文件系统里搜索, 因此结果更可靠. 但速度稍慢(没事, 有SSD呀). Find 的功能超级丰富, 足够写一本书的. 所以我只是简单说两句吧. 举例是最有效的记录方法, 不是么?

1, 寻找 abc/def 文件夹里名字类似 123*.jpg 的文件

find -regex ‘.*abc\/def\/123.*\.jpg’

2, 继续上例, 追加 png 文件类型

find -regextype posix-egrep -regex ‘.*abc\/def\/123.*\.(jpg|png)’

3, 继续, 找出上面照片里一天内新添加的照片

find -regextype posix-egrep -regex ‘.*abc\/def\/123.*\.(jpg|png)’ -ctime -24

4, 继续, 把符合条件的照片复制一份到 yesterday 文件夹

find -regextype posix-egrep -regex ‘.*abc\/def\/123.*\.(jpg|png)’ -ctime -24 -exec cp {} ~/yesterday \;

5, CLI(命令行) 也可以和 GUI(图形界面)结合起来, 例如如果我想打开上面命令搜索到的图片的话

find -regextype posix-egrep -regex ‘.*abc\/def\/123.*\.(jpg|png)’ -ctime -24 | while read line; do eog $line &; done;

其中 eog = Eye of Gnome, 是 Gnome 桌面的看图软件. 一下打开不同文件夹里所有符合条件的图片, 是不是比用鼠标一个一个点击要帅很多?

🙂