释放find命令的强大威力,一篇介绍linux里搜索文件工具find,locate的小文
Tags:linux | find
不幸的是,在Linux里面,尤其是Ubuntu里面,默认的图形化文件搜索并不总是有用。而使用命令行,只要一点点耐心,你就可以简单快速的找到文件;而且如果你愿意学一点的话你将有真正强大的搜索选项。
这个简单快捷的命令是“locate”。在终端使用这条命令你只需键入:
$ locate -i searchstring
这条命令将会搜索所有名字里包含“searchstring”的文件和文件夹,而 -i 意味着搜索是不区分大小写的(也就是说它会搜索 searchstring, Searchstring, sEaRcHsTrInG 等等)。结果是即时的因为系统已经创建了一个数据库(也被称为索引)来告诉你文件存储在何处。唯一的问题是新创建的或者最近被移动过的文件也许在下一次数据库更新前不能被正确的找到,而你也没有太多选项来设定搜索的范围。(强制更新数据库/索引可使用$sudo updatedb命令,这也花不了多少时间。)
Example:
例:
$ locate -i kdenlive.desktop
还有一个更为强大的命令叫做“find”。你可以指定”find”的搜索范围,搜索标准,以及在找到你要找的文件后采取的措施。”find”命令的语法是:
$ find
如果你不添加任何参数,find会默认搜索当前工作路径(即”.”),不使用搜索条件(默认显示所有文件),并使用-print(尽管名为打印,这一选项实际上只是将结果显示,或打印,在屏幕上)作为唯一动作。
Two examples:
两个例子:
$ sudo find / -type f -mmin -10
这个例子将搜索(从根目录,或“/”开始,并递归搜索子目录)所有10分钟内被修改的(-mmin -10)普通文件(-type f意味着普通文件,没有这个参数的话将会搜索普通文件+特殊文件+文件夹)并将结果显示给你。如果你知道你最近编辑了一个文件但不知道你把它放哪儿了,或你需要找到一个崩溃的程序的日志文件,这将很有用。这里我使用了“sudo”因为“find”不会搜索当前用户没有权限的文件/文件夹,并将返回一个错误信息。不过,使用“sudo”时需多加小心。
$ find ~ -iname “*xxx*” -exec mv -v {} /media/pr0n/ ;
这个例子将在你的主文件夹内(~)搜索所有名字包含“xxx”的文件(“*xxx*”),不区分大小写(-iname),并执行(-exec)一个将结果({})移至(mv)“/media/pr0n”的动作(-exec需要“;”来标记所需执行命令的结尾)。这样所有你下载的A片都会被移到同一个地方。“mv -v”将显示移动命令结果的详细信息(-v)。再警告一下对-exec的使用,尽管它很强大,如果使用的时候不小心的话你可能会覆盖你整个主文件夹或者整个硬盘-所以小心为上!
对那些非图形界面不可的同志们,你可以在软件库内找到一个叫做“catfish”的软件-这让你可以从一个图形化的前端运行locate和find,-但可使用的选项有限。就把它当成跟Windows搜索类似的一个东西吧。如果你想要find的所有功能,你得从命令行里运行它。