【问题标题】:linux search file based on file name pattern [closed]基于文件名模式的linux搜索文件[关闭]
【发布时间】:2012-06-18 02:56:26
【问题描述】:

我想根据文件名搜索一系列文件。

这是我的目录:

例如,我有上面的文件。

我只想搜索没有_bak的文件。

【问题讨论】:

  • 您使用什么编程语言?哪些 API?
  • 您的问题太模糊,无法给出好的答案。您是否正在尝试搜索文件的内容?文件名本身?您只是想获取不以_bak 结尾的文件名吗?
  • 另外,你真的应该用纯文本而不是图像来发布你的目录内容。请参阅formatting help。
  • 我不确定这是怎么回事。 OP 已将此标记为 linux unix 并且他要求挑选最后没有 _bak 的文件。我错过了什么吗? (虽然格式化的东西是真的。你真的应该使用纯文本。)
  • 问题对我来说似乎很清楚。模式以“ei469390ONL00”开头,看起来像windows,而不是linux,所以是dir

标签: linux unix


【解决方案1】:

使用 Grep 反转匹配选项。

例如,如果您希望所有文件都没有单词 _bak,请使用:

grep -v *_bak /path/to/file

【讨论】:

  • 您好 Erwald,您的回答无效,但也感谢您的帮助。
  • grep 如果您将ls 的输出通过管道传递给它,它将起作用。例如ls . | grep -v _bak
【解决方案2】:

如果您想将搜索限制在当前目录,请使用:

find . -maxdepth 1 -mindepth 1 ! -name '*_bak'

如果要递归查找所有目录,请删除-maxdepth 1。


根据 OP 的评论进行编辑

要获取以ei 开头且不以_bak 结尾的文件,请使用:

find . -type f -name 'ei*' -a ! -name '*_bak'

【讨论】:

  • 您好 Tim Pote,如果没有 -maxdepth 1 -mindepth 1,您的回答很好。感谢您的帮助。
  • @user1154655 根据您的建议更改。
  • 注意,必须使用引号或双引号。这不起作用:find . -name *_bak,因为 shell 将用当前目录中的匹配文件名替换 *_bak,因此您通常会遇到 unknown primary or operator 错误。在此处的答案中使用引号或双引号。
【解决方案3】:

请试试这个:

 find . -type f ! -iname "*_bak"

上面的命令会查找所有不以_bak结尾的文件。

【讨论】:

  • 该命令很有帮助。谢谢 。如果目录还包含其他文件,但我只想搜索以 ei 开头但没有 bak 的文件名?
  • 这样find . -name 'ei*' -type f ! -iname "*_bak"
猜你喜欢
  • 1970-01-01
  • 2021-02-13
  • 1970-01-01
  • 2014-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-17
  • 2019-04-04
相关资源
最近更新 更多