【问题标题】:Find all files with a filename beginning with a specified string?查找文件名以指定字符串开头的所有文件?
【发布时间】:2011-05-01 09:32:57
【问题描述】:

我有一个目录,里面大约有 100000 个文件,我想对所有以指定字符串开头的文件执行一些功能,该字符串可能匹配数万个文件。

我试过了

ls mystring*

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

find ./mystring* -type f

但这也有同样的问题。

代码需要看起来像

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

【问题讨论】:

标签: bash find


【解决方案1】:

使用带有通配符的find

find . -name 'mystring*'

【讨论】:

  • 并执行一些函数 "find . -name 'mystring*' -exec [command]" 例如删除 "find . -name 'mystring*' -exec rm {} \;"跨度>
  • 其中 {} 是文件名的占位符 :-)(因此您可以构建自己的操作)
  • 这似乎返回所有结果包含的字符串?
  • ...或find . -iname 'mystring*' 进行不区分大小写的搜索。
  • OP 指的是单个目录,因此在-name 之前插入-maxdepth 1 以限制查找到当前文件夹
【解决方案2】:
ls | grep "^abc"  

会给你所有文件开始(这是OP特别要求的)子字符串abc
它只对当前目录运行,而find 递归运行到子文件夹中。

要仅将find 用于以您的字符串开始的文件,请尝试

找到 . -name 'abc'*

【讨论】:

【解决方案3】:

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

尝试同时使用-iname 进行不区分大小写的搜索

例子:

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

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

例子:

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

find /path -iname 'yourstring*' -type f -exec du -sm {} \;

【讨论】:

    猜你喜欢
    • 2013-08-29
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 2015-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多