查找文件名以指定字符串开头的所有文件,该字符串可能与数千个文件匹配

Rik*_*son 141 bash find

我有一个大约有100000个文件的目录,我想对所有以指定字符串开头的文件执行某些功能,这可能会匹配成千上万的文件.

我试过了

ls mystring*
Run Code Online (Sandbox Code Playgroud)

但是这会返回bash错误'Too many arguments'.我的下一个计划是使用

find ./mystring* -type f
Run Code Online (Sandbox Code Playgroud)

但这有同样的问题.

代码需要看起来像

for FILE in `find ./mystring* -type f`
do
    #Some function on the file
done
Run Code Online (Sandbox Code Playgroud)

谢谢,Rik

Ser*_*sev 256

使用

find . -name 'mystring*'
Run Code Online (Sandbox Code Playgroud)

  • 并执行一些函数"find.-name'mystring*' - exec [command]"例如delete"find.-name'mystring*' - exec rm {} \;" (9认同)
  • ......或者"找到.-iname'mystring*'`用于不区分大小写的搜索. (7认同)
  • OP 指的是单个目录,因此在“-name”之前插入“-maxdepth 1”以将查找限制为当前文件夹 (3认同)
  • 其中{}是文件名的占位符:-)(因此您可以构建自己的操作) (2认同)

jac*_*ury 25

ls | grep "^a"  
Run Code Online (Sandbox Code Playgroud)

将为您提供以字母a开头的所有文件,并且只对当前目录起作用,而find将默认深入查看子目录.

我不是说它更好 - 只是一个不同的角度.


mat*_*son 8

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

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

例子:

find /path -iname 'yourstring*' -type f
Run Code Online (Sandbox Code Playgroud)

您还可以对没有管道符号或 xargs 的结果执行一些操作

例子:

搜索文件并以 MB 为单位显示其大小

find /path -iname 'yourstring*' -type f -exec du -sm {} \;
Run Code Online (Sandbox Code Playgroud)