Ubuntu – How to search for files in Unity

filesfindsearchunityunity-dash

I'm trying to use the dash instead of gnome-do, but I can't find files. "Find files" only returns "Top Results".

In gnome-do, I was able to set some often-used directories to index. For example, I have a folder called "ToRead" that's full of pdf files. I could search for pdf. Then I can browse the pdf files in ToRead and open files without using my mouse. Ideally, I want to replicate this functionality within the Dash/Places interface. Is this possible?

If not, what's the shortest way to do it?


Clarifications:

  • "Files & Folders" does not do what I want. It only shows files I've used recently.
  • I'd like to be able to do this without using the mouse and without having to hit Tab hundreds of times.
  • I don't need my search to be indexed. A file system crawl (but only in the directories I set) is fine.

Best Answer

I found the unity-place-python sample code and used that to create a lens to search your filesystem. It's currently kinda unstable, but you can search for files and you usually get results.

Unity FileSearch Lens

You can access the lens in the Unity Launcher. You can see it here where I'm searching for "lecture".

The filesearch-lens showing a search for "lecture"

The magnifying glass in the bottom left corner is the FileSearch Lens. (The icon changes based on your icon theme.) The lens shows files and folders in two separate sections.

You can add it to your main dash (Ubuntu button) by setting ShowGlobal=true in /usr/share/unity/places/filesearch.place. Unfortunately, Unity doesn't currently have a way to customize what lenses are in the Dash.

The files and folders sections are combined in the dash under the heading "File Search".

The dash showing some filesearch-lens results for "icon"

Config

When filesearch-lens first runs, it will create a config file ~/.filesearch.cfg. You can customize the directories to search, how deep to search, and what folders to ignore.

For example, here's my config:

[search]
#dirs = a comma separated list of folders to search
dirs = ~/data
#depth = how deep from / to search
depth = 5

[ignore]
#pattern = python-style regex for directories to ignore
pattern = ^\.|^bin$|^lib$|^apps$|^settings$|^eclipse$

I want it to search ~/data and two directories below it and to ignore all dotfiles and some other specific folders. (Note: No, it's not smart enough to not search the same folders if you give it nested folders like ~/,~/code, so don't do that.)

If you change the config file, you need to restart the daemon to reload it:

killall unity-filesearch-daemon

Install

I packaged it so you can download it from my ppa.

sudo add-apt-repository ppa:pydave/unity-lenses
sudo apt-get update
sudo apt-get install unity-place-filesearch

Then you need to reset unity before the lens will be noticed:

setsid unity

Experimental Features

If you give it a path, it usually shows the path as one of the results (so you can open folders like you could in gnome-do).

One of the features I'm still trying to get working properly is the ability to type a path, a space, and then a search word to search in the path. Most of the time it works, but sometimes it fails to find anything (probably because the search is taking forever).