find ~ 和 find * 之间的区别

Mas*_*tan 4 shell find filenames wildcards

搜索文件find *find ~搜索文件有什么区别 ?当我当前的工作目录打开root时在终端中,然后在终端中

root@devils-ey3:~# find * -print -quit
~
Run Code Online (Sandbox Code Playgroud)

在同一个目录

root@devils-ey3:~# find ~ -print -quit
/root
Run Code Online (Sandbox Code Playgroud)

但是如果我改变了,pwd那么输出find ~ -print -quit和以前一样,但另一个是改变。什么是工作的目的*,并~为查找文件?

ter*_*don 8

的基本格式find

find WHERE WHAT
Run Code Online (Sandbox Code Playgroud)

因此,在 中find **被视为WHERE。现在,*是一个通配符。它匹配当前目录中的所有内容(默认情况下,以 a 开头的文件/目录除外.)。Windows 等效项是*.*. 这意味着,*扩展它被传递给之前的所有文件和目录在当前目录find。为了说明,考虑这个目录:

$ ls
file  file2
Run Code Online (Sandbox Code Playgroud)

如果我们运行set -x以启用调试信息,然后运行您的find命令,我们会看到:

$ find * -print -quit
+ find file file2 -print -quit
file
Run Code Online (Sandbox Code Playgroud)

正如你在上面看到的,*扩展到目录中的所有文件,实际运行的是

find file file2 -print -quit
Run Code Online (Sandbox Code Playgroud)

由于-quit,这将打印您告诉它查找并退出的文件的第一个文件名。在您的情况下,您似乎有一个文件或目录被调用,~以便打印出来。

~但是,波浪号 ( ) 也有特殊含义。它是您$HOME目录的快捷方式:

$ echo ~
/home/terdon
Run Code Online (Sandbox Code Playgroud)

因此,当您find ~以 root 身份运行时,将~扩展为/home/root您运行的命令实际上是:

# find ~ -print -quit
+ find /root -print -quit
/root
Run Code Online (Sandbox Code Playgroud)

同样,您要find在特定位置搜索文件或目录并在打印第一个后退出。由于第一个匹配的文件或目录/root本身,这就是打印的内容。