Answers:
用途find
:
find . -maxdepth 1 -name "*string*" -print
它将在当前目录中找到所有maxdepth 1
包含“字符串”的文件(如果要递归,则删除),并将其打印在屏幕上。
如果要避免文件包含“:”,则可以键入:
find . -maxdepth 1 -name "*string*" ! -name "*:*" -print
如果要使用grep
(但我认为没有必要,因为您不想检查文件内容)可以使用:
ls | grep touch
但是,我重复一遍,它find
是为您的任务提供的更好,更清洁的解决方案。
find
是一个非常强大的工具,必须以某种方式“冗长”。:)
-print
因为这是默认行为,.
也是它检查的默认文件夹。
find . -name "*string*"
也很棒。删除.
会导致我的错误。再次感谢@Zagorax。
使用grep如下:
grep -R "touch" .
-R
意味着递归。如果您不想进入子目录,请跳过它。
-i
表示“忽略大小写”。您可能也觉得值得一试。
:
。反正有保留吗?也许使用选项?
grep -R "touch" . | cut -d ":" -f 2
grep -R "touch" . | cut -d ":" -f 1
对不起,您读错了)。
grep
返回包含内容和文件名包含touch
或包含内容的文件touch
,我不确定是哪种情况。在返回的文件列表中,一半包含touch
在标题中,另一半包含在touch
正文中,而不是标题。刚刚意识到这一点。
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
command 尝试以下语法:
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
compgen
不是适合此钉子的锤子。这个很少使用的工具旨在列出可用的命令,因此,它列出了当前目录中的文件(可能是脚本),并且既不能递归,也不能越过文件名的开头或搜索文件内容,从而使其大多没用。
grep -R "somestring" | cut -d ":" -f 1
man grep
,第二个问题用回答man find
。我不知道为什么要用Google而不是用人。