15

Мне приходит в голову одна странная ситуация: команда 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?

FYI:

  • Ubuntu 16.04.3 LTS amd64
  • find (GNU findutils) 4.7.0-git, /usr/bin/find

1 ответ1

25

~/.config/fish/functions является символической ссылкой. Поэтому речь идет о [акцент мой]:

-P
Никогда не переходите по символическим ссылкам. Это поведение по умолчанию. Когда find проверяет или печатает информацию в файле, а файл является символической ссылкой, используемая информация должна быть взята из свойств самой символической ссылки.

-L
Следуйте по символическим ссылкам. Когда find проверяет или печатает информацию о файлах, используемая информация должна быть взята из свойств файла, на который указывает ссылка, а не из самой ссылки [...]. Если -L действует, и find обнаруживает символическую ссылку на подкаталог во время его поиска, будет найден подкаталог, на который указывает символическая ссылка.

(источник)

Используйте find -L . Это опция, а не операнд; это должно появиться перед путем (ами).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .