如何在文件名中搜索多个单词(任意顺序)-GUI(或终端)

如何在文件名中搜索多个单词(任意顺序)-GUI(或终端)

我正在寻找一个搜索工具(来自 Ubuntu 14.04 桌面)或方法/命令(终端),它允许我在文件名中搜索完整或部分单词,以任何顺序,不考虑大小写。

你知道吗?

以下是我需要做的一个例子。我知道在某个地方/home/myusername我有一个文件,其名称包含单词“personal”、“income”、“tax”、“state”。但我记不清文件名是否

  • state personal income tax return.doc 或者
  • personal Income Tax return - state.doc或者
  • income tax return - State - personal.doc

而且我也记不住有些单词是否大写。另外,我还有无数个包含每个单词的文件。因此,仅对其中一个单词进行简单搜索(例如仅搜索“state”或仅搜索“tax”)对我没有多大帮助,因为它会返回太多文件。

理想情况下,我希望能够只输入 [income state return] 或 [state income return],然后让它返回文件名中包含所有三个单词的文件,而不管大小写或单词顺序如何。最好使用 GUI 工具,但终端方法也可以。

我尝试过 Catfish 和 gnome-search-tool/“搜索文件”——它们似乎都不能用于多个搜索词,除非这些词是按照它们在文件名中出现的顺序输入的,并且搜索词之间没有其他词。

答案1

不要使用grep!find具有完美的文件名匹配语法。要使用您的示例:

find [PATH...] -iname '*personal*' -iname '*income*' -iname '*tax*'

其中[PATH...]有零个或多个需要搜索的路径。

如果你没有禁用mlocate文件名数据库,使用它进行更快的搜索可能会更快。你甚至可以让它查找多个连词使用-A/--all选项搜索术语:

locate -i -A -b income personal tax

答案2

您可以grep多次使用您想要在文件名中查找的单词。例如,要找出包含单词“income”、“tax”、“personal”和“state”的文件名,您可以执行以下操作:

ls -R /home/myusername/ | grep -i "income"  | grep -i "tax" | grep -i "personal" | grep -i "state"

此处的-i开关将确保不区分大小写。

笔记:

find更适合这种情况。检查这个答案这个答案了解详情。

答案3

我通常在主目录中进行 find . | grep 'SEARCHTERM1\|SEARCHTERM2'

答案4

如果在使用 caja 或 nautilus 时,单击大搜索图标,输入您所说的单词,然后单击小搜索图标,它将对这些单词进行 AND 文件名搜索。xxx-seach-tool 的错误在于阻止多个“名称包含”选项行。告诉他们。

相关内容