查找所有文件名以指定字符串开头的文件?


148

我的目录中包含大约100000个文件,并且我想对所有以指定字符串开头的文件执行某些功能,该字符串可能匹配成千上万个文件。

我努力了

ls mystring*

但这会返回bash错误“参数过多”。我的下一个计划是使用

find ./mystring* -type f

但这有相同的问题。

代码需要看起来像

for FILE in `find ./mystring* -type f`
do
    #Some function on the file
done

代替的for循环,你应该管findwhile
暂停,直到另行通知。

Answers:


277

find . -name 'mystring*'

10
并执行某些功能“ find。-name'mystring *'-exec [command]”,例如删除“ find。-name'mystring *'-exec rm {} \;”
Eldar 2010年

2
其中{}是文件名:-)的占位符(这样您就可以构造自己的操作)
Sergio Tulentsev 2010年

1
这似乎返回所有包含字符串的结果吗?本
布莱恩ž

7
...或find . -iname 'mystring*'不区分大小写的搜索。
Frank Nocke

OP指的是单个目录,因此请-maxdepth 1在“ 插入” 之前插入-name以将当前文件夹限制为当前文件夹
jacanterbury

27
ls | grep "^abc"  

将为您提供所有以substring 开头的文件(这是OP专门要求的)abc
它仅在当前目录上find运行,而递归地进入子文件夹。

find仅用于以字符串开头的文件,请尝试

找 。名称'abc'*


4

如果您只想搜索文件,则应考虑-type f在搜索中使用

尝试也-iname用于不区分大小写的搜索

例:

find /path -iname 'yourstring*' -type f

您还可以对结果执行一些操作,而无需使用管道符号或xargs

例:

搜索文件并以MB为单位显示它们的大小

find /path -iname 'yourstring*' -type f -exec du -sm {} \;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.