locate
及其变体往往是一种快速的方法。
# updatedb # run as root, possibly using sudo, e.g. sudo -b updatedb. If file is on the system for more than a day it should already be in the index and this can be skipped
$ locate -i book1
如果定位不可用,则可以find
改用。它往往要慢得多,但也要精确得多。
如果您只有一个分区:(如果您的用户可能无权访问该文件,请以root身份运行)
$ find / -xdev -iname 'book1*' -print # If the iname extension to find is available
$ find / -xdev -print | grep -F -i /book1 # if iname is not available
如果您不包括-xdev
find
搜索其他分区上的内容(例如/proc
和)/sys
,则这些内容容易在屏幕上显示错误,特别是如果您不是root用户。(可以通过2> /dev/null
在find命令的末尾附加错误来隐藏错误(应删除注释))
如果您有多个分区,并且不知道文件位于哪个分区上,则可以获取一个列表lsblk
(在基于Linux的操作系统上,df
否则可以选择解析输出),并将其输入到find中:不知道您是否可以访问该文件)
$ find $(lsblk -O MOUNTPOINT -n | grep -F /) -xdev -iname 'book1*' -print # GNU-based OSes
$ find $(df -P|awk '$1 ~ /^\/dev/ {print $NF}') -xdev | grep -F -i book1 # Non-GNU based OSes.
(如果您的任何安装点中都有空格,这将有些脆弱)(df
参数可能需要调整。-P使GNU df
提供标准的POSIX输出。其他版本可能具有其他参数或需要省略。请阅读手册页)
在grep -F
排除了其他的东西回来,像交换分区。
在非GNU版本中,awk会找到以mount开头的设备,/dev
以获取实际的文件系统,然后从df
输出中打印最后一个字段(mountpoint)。
这也假定使用类似bourne的shell(ksh
并且bash
应该可以使用。如果您使用的是csh
变体,请在尝试之前启动一个可编写脚本的shell)
Book1
,并且该文件位于您可以读取的目录中,find / -iname book1
则将找到该文件。你确定它实际上是Book1
和不是Book1.xyz
?