我一直在寻找一个命令,将包含在文件名的字符串当前目录返回文件。 我所看到的locate
并find
能够找到开头的一些文件中的命令first_word*
或结尾的东西*.jpg
。
我怎样才能返回包含在文件名的字符串的文件列表?
例如,如果2012-06-04-touch-multiple-files-in-linux.markdown
是在当前目录中的文件。
我怎么能回到这个文件,包含字符串别人touch
? 使用命令如find '/touch/'
我一直在寻找一个命令,将包含在文件名的字符串当前目录返回文件。 我所看到的locate
并find
能够找到开头的一些文件中的命令first_word*
或结尾的东西*.jpg
。
我怎样才能返回包含在文件名的字符串的文件列表?
例如,如果2012-06-04-touch-multiple-files-in-linux.markdown
是在当前目录中的文件。
我怎么能回到这个文件,包含字符串别人touch
? 使用命令如find '/touch/'
使用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
选项应该是前-name
选项,如下图所示,
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
。 为了匹配不区分大小写传球-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
如果字符串是在名称的开头,你可以这样做
$ compgen -f .bash
.bashrc
.bash_profile
.bash_prompt
grep -R "somestring" | cut -d ":" -f 1
已经提供给了许多解决方案的替代方案是利用水珠的**
。 当您使用bash
使用选项globstar
( shopt -s globstar
),或者你使用zsh
,你可以使用水珠**
此。
**/bar
做一个递归目录搜索的文件bar
(可能包括文件bar
在当前目录)。 备注,这不能与其他形式的相同的路径段内通配的组合; 在这种情况下, *
运营商恢复到自己平时的效果。
需要注意的是之间存在微妙的差异zsh
和bash
在这里。 虽然bash
将穿越软链接目录zsh
不会。 对于这一点,你必须使用水珠***/
在zsh
。
find / -exec grep -lR "{test-string}" {} \;