Linux-Поиск файлов с именем, содержащим строку

Я искал команду, которая будет возвращать файлы из текущего каталога, которые содержат строку в имени файла. Я видел locate и find команды, которые могут найти файлы, начинающиеся с чего-то first_word* и заканчивая чем-то *.jpg.

как я могу вернуть список файлов, которые содержат строку в имени файла?

например, если 2012-06-04-touch-multiple-files-in-linux.markdown файл в текущем каталоге.

как я могу вернуть этот файл и другие содержит строку touch? Использование такой команды, как find '/touch/'

6 ответов


использовать find:

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

она найдет все файлы в текущем каталоге (удалить maxdepth 1 Если вы хотите, чтобы он рекурсивный), содержащий "строку", и напечатает его на экране.

если вы хотите избежать файла, содержащего":", вы можете ввести:

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

если вы хотите использовать grep (но я думаю, что это не обязательно, поскольку вы не хотите проверять содержимое файла) вы можете использовать:

ls | grep touch

Но, Я повторяю, find является лучшим и более чистым решением для вашей задачи.


используйте grep следующим образом:

grep -R "touch" .

-R значит рекурсия. Если вы не хотите входить в подкаталоги, пропустите его.

-i означает "игнорировать регистр". Возможно, Вам тоже стоит попробовать.


на -maxdepth опция должна быть перед , как показано ниже.,

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

find $HOME -name "hello.c" -print

это будет искать все $HOME (т. е. /home/username/) система для любых файлов с именем " hello.C" и отображать их пути:

/Users/user/Downloads/hello.c
/Users/user/hello.c

однако, это не будет соответствовать HELLO.C или HellO.C. Для соответствия является нечувствительным к регистру pass следующим образом:

find $HOME -iname "hello.c" -print

пример вывода:

/Users/user/Downloads/hello.c
/Users/user/Downloads/Y/Hello.C
/Users/user/Downloads/Z/HELLO.c
/Users/user/hello.c

передать -type f возможность поиска только файлов:

find /dir/to/search -type f -iname "fooBar.conf.sample" -print
find $HOME -type f -iname "fooBar.conf.sample" -print

на -iname работает либо на GNU, либо на BSD (включая OS X) версия найти команду. Если ваша версия команды find не поддерживает -iname попробуйте следующий синтаксис, используя :

find $HOME | grep -i "hello.c"
find $HOME -name "*" -print | grep -i "hello.c"

или попробовать

find $HOME -name '[hH][eE][lL][lL][oO].[cC]' -print

пример вывода:

/Users/user/Downloads/Z/HELLO.C
/Users/user/Downloads/Z/HEllO.c
/Users/user/Downloads/hello.c
/Users/user/hello.c

если строка в начале имени, вы можете сделать это

$ compgen -f .bash
.bashrc
.bash_profile
.bash_prompt

grep -R "somestring" | cut -d ":" -f 1