234

我一直在寻找一个命令,它将从当前目录返回文件名中包含一个字符串的文件。我已经看到locatefind命令可以找到以 something 开头first_word*或以 something 结尾的文件*.jpg

如何返回文件名中包含字符串的文件列表?

例如,如果2012-06-04-touch-multiple-files-in-linux.markdown是当前目录中的文件。

我怎样才能返回这个文件和其他包含字符串的文件touch?使用命令,例如find '/touch/'

4

8 回答 8

387

使用find

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

它将在当前目录中找到所有maxdepth 1包含“字符串”的文件(如果您希望它递归删除)并将其打印在屏幕上。

如果你想避免包含':'的文件,你可以输入:

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

如果您想使用grep(但我认为就您不想检查文件内容而言没有必要),您可以使用:

ls | grep touch

但是,我再说一遍,find对于您的任务来说,这是一个更好、更清洁的解决方案。

于 2012-07-04T12:25:12.053 回答
17

使用 grep 如下:

grep -R "touch" .

-R意味着递归。如果您不想进入子目录,请跳过它。

-i意思是“忽略大小写”。您可能会发现这也值得一试。

于 2012-07-04T12:20:50.883 回答
7

-maxdepth选项应该在-name选项之前,如下所示。

find . -maxdepth 1 -name "string" -print
于 2014-09-15T14:25:37.130 回答
3
find $HOME -name "hello.c" -print

这将在整个$HOME(即/home/username/)系统中搜索任何名为“hello.c”的文件并显示它们的路径名:

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

但是,它不会匹配HELLO.CHellO.C。要匹配不区分大小写,请-iname按如下方式传递选项:

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 命令。如果您的 find 命令版本不支持-iname,请使用命令尝试以下语法grep

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
于 2016-08-10T14:17:40.297 回答
0

如果字符串在名称的开头,您可以这样做

$ compgen -f .bash
.bashrc
.bash_profile
.bash_prompt
于 2012-12-18T06:16:44.347 回答
0

已经提供的许多解决方案的替代方案是使用 glob **。当您使用bash选项globstar( shopt -s globstar) 或使用 时zsh,您可以只使用 glob **

**/bar

递归目录搜索命名的文件bar(可能包括bar当前目录中的文件)。请注意,这不能与同一路径段内的其他形式的通配符结合使用;在这种情况下,*操作员将恢复其通常的效果。

zsh请注意,这里和之间存在细微差别bash。虽然bash将遍历目录的软链接,zsh但不会。为此,您必须***/zsh.

于 2018-12-03T12:32:26.937 回答
-1
find / -exec grep -lR "{test-string}" {} \;
于 2019-04-10T17:23:33.933 回答
-3
grep -R "somestring" | cut -d ":" -f 1
于 2017-09-18T08:48:46.973 回答