立即按名称搜索文件

在Windows下有一个智能软件“Everything”,它监听NTFS的变化,使其能够立即按名称搜索文件 - 仅需一秒钟或更短的时间。
Ubuntu是否有类似的功能?

这似乎是Unity Dash / Zeitgeist应该能够做到的事情,尽管从个人使用来看,Dash的性能水平似乎还不够。 - Knowledge Cube
Unity Dash本身做得相当不错。你试过Synapse吗?它在Ubuntu软件中心里有。 - Nitin Venkatesh
http://askubuntu.com/questions/714091/my-quest-to-find-the-fastest-search-app-for-linux - nazar2sfive
6个回答

Ubuntu还有一个好用的老工具locate可以在命令行中使用。

locate会读取由updatedb(8)准备的一个或多个数据库,并将与至少一个PATTERN匹配的文件名写入标准输出,每行一个。

updatedb

updatedb用于创建或更新locate(1)使用的数据库。如果数据库已经存在,则会重用其数据以避免重新读取未更改的目录。通常情况下,updatedb会被cron(8)每天运行一次,以更新默认数据库。

示例...

locate *.txt

结果为

/boot/grub/gfxblacklist.txt
/discworld/.Trash-1000/files/Breaking Bad S04E10 Nl subs DutchReleaseTeam/DutchReleaseTeam NFO.txt
/discworld/.Trash-1000/files/Breaking Bad S04E10 Nl subs DutchReleaseTeam/Torrent downloaded from Demonoid.me.txt
/discworld/.Trash-1000/files/True Blood S04E12 HDTV.XviD (NL subs) DutchReleaseTeam/Dutch Release Team NFO Read Before Playing.txt
/discworld/.Trash-1000/files/True Blood S04E12 HDTV.XviD (NL subs) DutchReleaseTeam/Torrent_downloaded_from_Demonoid.me.txt
/etc/X11/rgb.txt

它所展示的内容会立即显示出来,你可以使用正则表达式进行搜索。

没有,没有这样的工具。我所知道的所有搜索工具都依赖于自己的数据库,无法像Everything那样使用内部文件系统的索引和日志数据。
话虽如此,在正常情况下,"Linux"工具已经足够了。与Everything不同,locate能够索引任何文件系统上的文件,并且速度非常快。如果您想查找个人文档或启动程序,那么像gnome-dokupfer这样的启动器软件更适合这个任务。

是的,我们有类似的实用工具。首先,Nautilus(文件浏览器)可以让您快速搜索文件。对于您使用过的文件,您可以按下super+F打开文件和文件夹镜头并输入文件名。还有一些文件索引器,比如Tracker(可能在不久的将来可以从文件和文件夹镜头中访问)。

你回答了我的关于"鹦鹉螺"的问题,加一分。 - user32459

在命令行中,我使用由 Rinzwind 描述的 locate(1+)。如果您需要一些图形用户界面,我喜欢 google 桌面

我记不得我从哪里偷来的,但试试这个脚本:
    #!/bin/bash

t=$(mktemp)
locate "$1" | awk '{ printf "%4d\t\"%s\"\n",  NR, $0 }' > $t

[[ -s $t ]] || { echo "No results found"; exit; }

rows=$(wc -l "$t" | cut -d' ' -f1)

if [[ $rows == 1 ]]; then 
     file=$(sed 's/^.*\t"\(.*\)"$/\1/' $t)
    xdg-open "$file" &
else
    response=$(dialog --stdout --menu 'Choose a File:' 20 70 15 --file $t)
    if [[ -n "$response" ]]; then
        file=$(sed -n "/^\s*$response\t/{s/^.*\t\"\(.*\)\"$/\1/;p}" $t)
        if [[ -n $file ]]; then 
            echo "You chose $file"
            xdg-open "$file" &
        fi
    fi
fi

将此脚本复制并粘贴到一个文本文件中...
完成后,将其设置为可执行文件(sudo chmod +x),然后放置在/usr/local/bin或~/bin目录中。
现在,如果您的脚本名称是search,您需要输入以下命令:
search nomefile :)
另一个有前途的工具:

http://www.lesbonscomptes.com/recoll/


1像那样的自定义脚本不应该放在 /usr/bin 目录下,那个目录是供软件包和操作系统使用的。自定义脚本应该放在 /usr/local/bin 或者 ~/bin 目录下,以符合文件系统层次结构标准。 - ImaginaryRobots
非常感谢!我正在纠正这篇帖子 :)如果我把它放在 /usr/local/bin 目录下,是所有用户都能使用它,还是只有我的用户? - Pitto
1如果你希望其他人能够运行它,将其放在/usr/local/bin是一个不错的选择,但你还需要修改权限,以便让他们能够读取和执行它。 - ImaginaryRobots
你的意思是,如果我以mickey的身份登录,我会得到自己的/usr/local/bin目录,而如果我以donald的身份登录,即使在相同的位置,也会有所不同? - Pitto
@Pitto:不对。文件仍然会存在,但是除非权限设置正确,其他用户将无法读取或执行它。 - MestreLion

我能够在Ubuntu 15.10上使用PlayOnLinux 4.2.6安装Windows版本的Everything(1.3.4.686.x86)。它完美地运行,并且可以索引Ubuntu分区、同一驱动器上的NTFS分区以及添加的NTFS驱动器。它的速度和效率与Windows 7上的一样快捷无比。