Find all files with name containing string

command-line, linux, locate, unix

Solution

Use `find`:

`find . -maxdepth 1 -name "*string*" -print`

It will find all files in the current directory (delete `maxdepth 1` if you want it recursive) containing "string" and will print it on the screen.

If you want to avoid file containing ':', you can type:

`find . -maxdepth 1 -name "*string*" ! -name "*:*" -print`

If you want to use `grep` (but I think it's not necessary as far as you don't want to check file content) you can use:

`ls | grep touch`

But, I repeat, `find` is a better and cleaner solution for your task.

Problem

I have been searching for a command that will return files from the current directory which contain a string in the filename. I have seen `locate` and `find` commands that can find files beginning with something `first_word*` or ending with something `*.jpg`. How can I return a list of files which contain a string in the filename? For example, if `2012-06-04-touch-multiple-files-in-linux.markdown` was a file in the current directory. How could I return this file and others containing the string `touch`? Using a command such as `find '/touch/'`

Original source

Related problems