我一直在寻找一个命令,将从当前目录返回文件,其中包含文件名中的字符串。我见过locate和find命令可以查找以first_word*开头或以*.jpg结尾的文件。
如何返回包含文件名字符串的文件列表?
例如,如果2012-06-04-touch-multiple-files-in-linux。Markdown是当前目录中的一个文件。
我怎么能返回这个文件和其他包含字符串触摸?使用命令,例如find '/touch/'
我一直在寻找一个命令,将从当前目录返回文件,其中包含文件名中的字符串。我见过locate和find命令可以查找以first_word*开头或以*.jpg结尾的文件。
如何返回包含文件名字符串的文件列表?
例如,如果2012-06-04-touch-multiple-files-in-linux。Markdown是当前目录中的一个文件。
我怎么能返回这个文件和其他包含字符串触摸?使用命令,例如find '/touch/'
当前回答
-maxdepth选项应该在name选项之前,如下所示。
find . -maxdepth 1 -name "string" -print
其他回答
已经提供的许多解决方案的替代方案是使用glob **。当你使用带有globstar选项的bash (shop -s globstar)或使用zsh时,你可以只使用glob **。
**/bar
对名为bar的文件进行递归目录搜索(可能包括当前目录中的文件栏)。注意,这不能与同一路径段内的其他形式的通配符组合;在这种情况下,*操作符恢复到通常的效果。
注意,这里zsh和bash之间有细微的区别。bash将遍历到目录的软链接,而zsh不会。为此,你必须在zsh中使用glob ***/。
grep -R "somestring" | cut -d ":" -f 1
使用grep的方法如下:
grep -R "touch" .
-R表示递归。如果您不愿意进入子目录,那么可以跳过它。
-i意思是“忽略大小写”。你可能会发现这也值得一试。
使用找到:
找到。-maxdepth 1 -name "*string*" -print
它将找到当前目录中所有包含“string”的文件(如果你想递归,请删除maxdepth 1),并将其打印在屏幕上。
如果你想避免包含':'的文件,你可以输入:
找到。-maxdepth 1 -name "*string*" !-name "*:*" -打印
如果你想使用grep(但我认为这是没有必要的,只要你不想检查文件内容),你可以使用:
ls | grep触摸
但是,我重复一遍,找到一个更好更干净的解决方案。
如果字符串位于名称的开头,则可以这样做
$ compgen -f .bash
.bashrc
.bash_profile
.bash_prompt