Asp*_*e27 35 command-line find files
我正在尝试查找名为Book1的文件。
在我的测试中,我试图查找上述文件,而在此测试中,我不知道该文件位于何处。
我试过了,find / -iname book1
但没有输出。
如果我不知道文件所在的位置,如何使用命令行找到名为 book1 的文件?
编辑:
下面更详细地描述了我的场景:
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
也可能会发现Book1
,bOok1
等,如果你确定你要找的正在调用该文件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)
你可以试试这个locate
命令。它使用文件名数据库来加快搜索速度。
要搜索所有文件匹配*book1*
并忽略大小写,您可以使用
locate -i book1
Run Code Online (Sandbox Code Playgroud)
如果要搜索以开头的文件,book1
则需要自己使用通配符:
locate -i 'book1*'
Run Code Online (Sandbox Code Playgroud)
它比 快得多find
,但仅与上次刷新数据库时保持同步。
如果您知道您有一个名为 的文件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
选项仅允许不区分大小写的版本。