如何从任何目录中查找文件

Asp*_*e27 35 command-line find files

我正在尝试查找名为Book1的文件。

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

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

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

编辑:

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

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

Ark*_*zyk 47

首先, 的参数-iname是 shell模式。您可以在Bash 手册中阅读有关模式的更多信息。要点是为了find实际找到文件,文件名必须匹配指定的模式。要进行不区分大小写的字符串book1匹配,Book1.gnumeric您必须添加*如下内容:

find / -iname 'book1*'
Run Code Online (Sandbox Code Playgroud)

或指定全名:

find / -iname 'Book1.gnumeric'
Run Code Online (Sandbox Code Playgroud)

其次,-iname将使find如果指定忽略的文件名的情况下,从而-iname book1也可能会发现Book1bOok1等,如果你确定你要找的正在调用该文件Book1.gnumeric ,然后不使用-iname,但是-name,它会更快:

find / -name 'Book1.gnumeric'
Run Code Online (Sandbox Code Playgroud)

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

最后 - 您确定要在系统上的任何地方查找该文件 吗?如果您正在处理该文件$HOME或从某处下载它,则您要查找的文件实际上可能在您的目录中。同样,这可能要快得多。

编辑

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

find / -iname 'book1*'
Run Code Online (Sandbox Code Playgroud)

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

find / -iname 'book1*' 2>/dev/null
Run Code Online (Sandbox Code Playgroud)

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

find / -iname 'book1*' -print -quit 2>/dev/null
Run Code Online (Sandbox Code Playgroud)


Jam*_*s K 6

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

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

locate -i book1
Run Code Online (Sandbox Code Playgroud)

如果要搜索以开头的文件,book1则需要自己使用通配符:

locate -i 'book1*'
Run Code Online (Sandbox Code Playgroud)

它比 快得多find,但仅与上次刷新数据库时保持同步。


Fox*_*Fox 5

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

find / -iname 'book1.*'
Run Code Online (Sandbox Code Playgroud)

如果您确定的只是文件名包含该词book,则可以生成一个可能更大的列表

find / -iname '*book*'
Run Code Online (Sandbox Code Playgroud)

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

$ ls Book1
ls: cannot access 'Book1': No such file or directory
$ ls Book1.*
Book1.gnumeric
Run Code Online (Sandbox Code Playgroud)

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