我一直在寻找一个命令,将从当前目录返回文件,其中包含文件名中的字符串。我见过locate和find命令可以查找以first_word*开头或以*.jpg结尾的文件。

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

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

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


当前回答

使用grep的方法如下:

grep -R "touch" .

-R表示递归。如果您不愿意进入子目录,那么可以跳过它。

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

其他回答

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

**/bar

对名为bar的文件进行递归目录搜索(可能包括当前目录中的文件栏)。注意,这不能与同一路径段内的其他形式的通配符组合;在这种情况下,*操作符恢复到通常的效果。

注意,这里zsh和bash之间有细微的区别。bash将遍历到目录的软链接,而zsh不会。为此,你必须在zsh中使用glob ***/。

grep -R "somestring" | cut -d ":" -f 1
find $HOME -name "hello.c" -print

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

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

但是,它不会匹配HELLO.C或HELLO.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命令版本不支持-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

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

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

如果字符串位于名称的开头,则可以这样做

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