如何从任意目录查找文件

如何从任意目录查找文件

我正在尝试寻找一个名为书1

在我的测试中,我试图查找上述文件,但在此测试中,我不知道该文件位于何处。

我尝试过find / -iname book1,但没有输出。

如果我不知道名为 book1 的文件所在位置,如何使用命令行找到该文件?

编辑:

下面更详细地描述了我的场景:

  1. 文件扩展名未知
  2. 确切的名称(即大写字母、数字等)未知
  3. 文件位置未知

答案1

首先,参数-iname是一个 shell图案。您可以阅读有关模式的更多信息bash手册。要点是为了find真正寻找文件的文件名必须与指定的模式匹配。要使不区分大小写的字符串book1匹配Book1.gnumeric,您必须添加*如下内容:

find / -iname 'book1*'

或指定全名:

find / -iname 'Book1.gnumeric'

其次,-inamefind忽略文件名大小写,因此如果您指定-iname book1它也可能会找到等Book1bOok1如果您确定您要查找的文件被调用,Book1.gnumeric 则不要使用-inamebut -name,它会更快:

find / -name 'Book1.gnumeric'

第三,请记住引用中所述的模式其他答案

最后 - 您确定要查找该文件吗 到处在你的系统上?$HOME如果您处理过该文件或从某处下载了该文件,则您要查找的文件实际上可能位于您的目录中。同样,这可能会快得多。

编辑

我注意到你编辑了你的问题。如果您确实不知道完整的文件名、大小写和位置,您应该使用如下所示的内容:

find / -iname 'book1*'

我还建议将其放在2>/dev/null行尾以隐藏以非 root 用户*permission denied*身份调用时将出现的所有错误和其他错误:find

find / -iname 'book1*' 2>/dev/null

如果您确定要查找单个文件,并且系统上只有一个文件符合您可以在find找到第一个匹配文件后退出的条件:

find / -iname 'book1*' -print -quit 2>/dev/null

答案2

你可以尝试一下locate命令。它使用文件名数据库来加快搜索速度。

要搜索所有匹配的文件*book1*并忽略大小写,您可以使用

locate -i book1

如果你想搜索文件开始book1需要自己做通配符:

locate -i 'book1*'

它比 快得多find,但仅与上次刷新数据库时一样最新。

答案3

如果您知道有一个名为 的文件book1.something,其中文件位置、 的确切值something以及文件名的大小写模式均未知:

find / -iname 'book1.*'

如果您确定的只是文件名包含单词book,您可以使用以下命令生成一个可能更大的列表

find / -iname '*book*'

的参数-name是 shell glob 模式。从文件所在的目录中,比较:

$ ls Book1
ls: cannot access 'Book1': No such file or directory
$ ls Book1.*
Book1.gnumeric

这代表 执行的搜索类型-name。该-iname选项仅允许不区分大小写的版本。

答案4

通过 Zsh,你可以使用 glob 模式,所以这也有效:

ls -a /**/book1

这将找到名为的文件所在的所有位置book1

在我的测试中,这似乎比使用更快find,而且它也几乎不产生任何结果用户权限错误当没有 root 权限运行时

手动的

相关内容