Linux – 查找名称包含string的文件
我一直在寻找一个将从当前目录返回文件名中包含一个string的文件的命令。 我已经看到了locate
和find
命令,可以find文件开头first_word*
或结尾的东西*.jpg
。
如何返回文件名中包含string的文件列表?
例如,如果2012-06-04-touch-multiple-files-in-linux.markdown
是当前目录中的文件。
我怎么能返回这个文件和其他包含stringtouch
? 使用诸如find '/touch/'
类的命令
使用find
:
find . -maxdepth 1 -name "*string*" -print
它会查找当前目录下的所有文件(如果你想recursion的话,删除maxdepth 1
)包含“string”,并将其显示在屏幕上。
如果你想避免包含':'的文件,你可以input:
find . -maxdepth 1 -name "*string*" ! -name "*:*" -print
如果你想使用grep
(但是我认为这不是必要的,只要你不想检查文件内容),你可以使用:
ls | grep touch
但是,我再说一遍, find
是一个更好,更干净的解决scheme,为您的任务。
使用grep如下:
grep -R "touch" .
-R
意味着recursion。 如果你不想进入子目录,那就跳过它。
-i
意思是“忽略案件”。 你可能会觉得这个值得一试。
-maxdepth
选项应位于-name
选项之前,如下所示。
find . -maxdepth 1 -name "string" -print
find $HOME -name "hello.c" -print
这将在整个$HOME
(即/home/username/
)系统中search名为“hello.c”的任何文件并显示其path名:
/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
选项只search文件:
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
如果string位于名称的开头,则可以这样做
$ compgen -f .bash .bashrc .bash_profile .bash_prompt
grep -R "somestring" | cut -d ":" -f 1