我发现了一个奇怪的情况,find
命令无法找到某些文件但可以找到另一个文件,并且它们都存在于本地路径中。
原代码如下截图:
文件在那里:
$ ls -lh ~/.config/fish/functions/
total 92K
-rw-rw-r-- 1 echecod echecod 4.2K Dec 20 16:42 __async_prompt.fish
-rw-rw-r-- 1 echecod echecod 3.0K Dec 20 16:42 done.fish
-rw-rw-r-- 1 echecod echecod 597 Dec 20 16:42 humanize_duration.fish
-rwxrwxr-x 1 echecod echecod 5.2K Dec 20 16:42 __informative_git_prompt.fish*
-rwxrwxr-x 1 echecod echecod 1.4K Dec 20 16:42 prompt_pwd.fish*
-rw-rw-r-- 1 echecod echecod 61K Feb 20 11:38 z.lua
但它们无法被找到:
$ find ~/.config -name z.lua
$ find ~/.config -name prompt_pwd.fish
上层目录及其中的文件:
$ ls -ld ~/.config/fish/
drwx------ 2 echecod echecod 4096 Feb 20 13:35 /home/echecod/.config/fish/
$ ls -lh ~/.config/fish/
total 24K
lrwxrwxrwx 1 echecod echecod 46 Dec 20 16:45 config.fish -> ../../Dotfiles.d/fish/.config/fish/config.fish*
-rw-r--r-- 1 echecod echecod 1.3K Dec 7 11:00 fishd.DUA-001
-rw-r--r-- 1 echecod echecod 14K Feb 19 18:21 fishd.DUA-BuildServer000
-rw-r--r-- 1 echecod echecod 2.7K Feb 19 10:47 fish_variables
lrwxrwxrwx 1 echecod echecod 44 Dec 20 16:45 functions -> ../../Dotfiles.d/fish/.config/fish/functions/
这些可以在以下位置找到:
$ find ~/.config -name config.fish
/home/echecod/.config/fish/config.fish
$ find ~/.config -name fish_variables
/home/echecod/.config/fish/fish_variables
$ find ~/.config -name functions
/home/echecod/.config/fish/functions
以防万一(因为functions -> ../../Dotfiles.d/fish/.config/fish/functions/
):
$ ls -lh ~/Dotfiles.d/fish/.config/fish/functions/
total 92K
-rw-rw-r-- 1 echecod echecod 4.2K Dec 20 16:42 __async_prompt.fish
-rw-rw-r-- 1 echecod echecod 3.0K Dec 20 16:42 done.fish
-rw-rw-r-- 1 echecod echecod 597 Dec 20 16:42 humanize_duration.fish
-rwxrwxr-x 1 echecod echecod 5.2K Dec 20 16:42 __informative_git_prompt.fish*
-rwxrwxr-x 1 echecod echecod 1.4K Dec 20 16:42 prompt_pwd.fish*
-rw-rw-r-- 1 echecod echecod 61K Feb 20 11:38 z.lua
我的 出了什么问题find
?
供参考:
- Ubuntu 16.04.3 LTS amd64
- 查找(GNU findutils)4.7.0-git,
/usr/bin/find
答案1
~/.config/fish/functions
是一个符号链接。因此它是关于 [强调我的]:
-P
永远不要跟踪符号链接。这是默认行为. 当find
查看或打印某个文件的信息时,如果该文件为符号链接,则所使用的信息取自该符号链接本身的属性。
-L
遵循符号链接。find
检查或打印文件信息时,所用信息应取自链接指向的文件的属性,而不是链接本身[...]。如果-L
有效并find
在搜索过程中发现指向子目录的符号链接,则将搜索符号链接指向的子目录。
使用find -L
。这是一个选项,而不是操作数;它应该出现在路径之前。