find ~ 和 find * 之间的区别

find ~ 和 find * 之间的区别

搜索文件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 *' 的作用是什么;看回答)

  • ~用于$HOME目录。

    因此,在(主目录)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 退出之前调用。
              退出状态可能为零也可能不为零,具体取决于错误是否已发生。
  1. ~被视为路径,/root因为您位于 root 终端上。
  2. -quit仅打印目录名称

但是如果我更改密码,那么 find ~ -print -quit 的输出与以前相同......

如上所述:-find ~ -print -quit印刷/root每次当路径设置为~(这是/root因为 root shell)并使用-quite. (独立于pwd!)

相关内容