前几天看到一个命令locate很好用,而且看起来很快。了解了下发现,这个命令很牛逼。man一下就发现,这个命令不是搜索文件系统,而是从数据库里搜索。数据库由updatedb命令来维护,有一个或者多个。
既然是搜索,第一个问题就是正则是否支持,locate支持。第二个问题是通配符(globbing)是否支持,locate也支持。而且要是没有通配字符,那么pattern 就相当于是*pattern*
。
既然是从数据库里查找,那么,就有几个问题需要注意,第一,它并不保证搜到的文件一定存在。第二,搜不到的文件也不一定代表不存在。以上两点都是因为和updatedb的更新周期相关。
如果没有找到或者查找的过程中出现致命错误,locate的返回值是1, 看来以后写脚本的时候也可以用这种规范,如果没有异常,成功找到匹配项,则返回值是0。
当然如果你要检查文件是否存在,那么也是可以的,需要加上-e选项。
一个概念basename,应该是指一个文件的文件名字。不包含路径。