我正在尝试寻找一个名为书1。
在我的测试中,我试图查找上述文件,但在此测试中,我不知道该文件位于何处。
我尝试过find / -iname book1
,但没有输出。
如果我不知道名为 book1 的文件所在位置,如何使用命令行找到该文件?
编辑:
下面更详细地描述了我的场景:
- 文件扩展名未知
- 确切的名称(即大写字母、数字等)未知
- 文件位置未知
答案1
首先,参数-iname
是一个 shell图案。您可以阅读有关模式的更多信息bash手册。要点是为了find
真正寻找文件的文件名必须与指定的模式匹配。要使不区分大小写的字符串book1
匹配Book1.gnumeric
,您必须添加*
如下内容:
find / -iname 'book1*'
或指定全名:
find / -iname 'Book1.gnumeric'
其次,-iname
将find
忽略文件名大小写,因此如果您指定-iname book1
它也可能会找到等Book1
。bOok1
如果您确定您要查找的文件被调用,Book1.gnumeric
则不要使用-iname
but -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 权限运行时
看手动的。