搜索文件find *
和之间有什么区别 ?find ~
在终端中,当我当前的工作目录打开时root
,然后在终端中
root@devils-ey3:~# find * -print -quit
~
在同一目录下
root@devils-ey3:~# find ~ -print -quit
/root
但是,如果我更改,pwd
则输出find ~ -print -quit
与以前相同,但另一个发生变化。find 文件*
的工作目的是什么?~
答案1
的基本格式find
是
find WHERE WHAT
因此,在 中find *
,*
被视为WHERE
。现在,*
是一个通配符。它匹配当前目录中的所有内容(默认情况下,以 开头的文件/目录除外.
)。 Windows 的等效项是*.*
.这意味着*
就是扩大在传递到find
.为了说明这一点,请考虑以下目录:
$ ls
file file2
如果我们运行set -x
以启用调试信息,然后运行您的find
命令,我们会看到:
$ find * -print -quit
+ find file file2 -print -quit
file
如上所示,*
扩展为目录中的所有文件,实际运行的是
find file file2 -print -quit
由于-quit
,这会打印您告诉它查找的文件的第一个文件名并退出。就您而言,您似乎有一个名为的文件或目录,~
因此这就是打印的文件或目录。
然而,波形符 ( ~
) 也有特殊含义。这是您目录的快捷方式$HOME
:
$ echo ~
/home/terdon
因此,当您find ~
以 root 身份运行时,~
会扩展为/home/root
,并且您运行的命令实际上是:
# find ~ -print -quit
+ find /root -print -quit
/root
再次,您告诉find
在特定位置搜索文件或目录,并在打印第一个后退出。由于第一个匹配的文件或目录/root
是其本身,因此这就是打印的内容。
答案2
首先记住以下语法find
:-
find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]
搜索文件时 find * 和 find ~ 有什么区别?
*
是匹配所有内容的 while 卡。这里
find *
传递当前目录中的文件/目录列表以及作为要搜索的目标名称的列表。因此,它将找到与中的文件同名的所有文件pwd
-
因此,在(主目录)
find ~
内(递归地)查找文件和目录~
root@devils-ey3:~# find * -print -quit ~
必须有一个文件或目录在上面的输出~
中命名。 /root
(不要与~
as$HOME
目录混淆)
root@devils-ey3:~# find ~ -print -quit /root
解释find ~ -print -quit
:-
相当大的选择-quit
::
-quit 立即退出。没有子进程将继续运行,但命令中不再指定路径 线将被处理。例如, find /tmp/foo /tmp/bar -print -quit 将仅打印 /tmp/foo。 任何使用 -execdir ... {} + 构建的命令行都将在 find 退出之前调用。 退出状态可能为零也可能不为零,具体取决于错误是否已发生。
~
被视为路径,/root
因为您位于 root 终端上。-quit
仅打印目录名称
但是如果我更改密码,那么 find ~ -print -quit 的输出与以前相同......
如上所述:-find ~ -print -quit
印刷/root
每次当路径设置为~
(这是/root
因为 root shell)并使用-quite
. (独立于pwd
!)