16

One weird situation occurs to me that find command cannot find some files but can find another, and they all exist in the local path.

The original code as a screenshot:

screen.

The files are there:

$ 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

But they cannot be found:

$ find ~/.config -name z.lua
$ find ~/.config -name prompt_pwd.fish

The upper directory and files in it:

$ 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/

These can be found:

$ 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

And just in case (because of 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

What is wrong with my find?

FYI:

  • Ubuntu 16.04.3 LTS amd64
  • find (GNU findutils) 4.7.0-git, /usr/bin/find
  • @John1024 Sorry about that, but it contains a lot of text, I've show a lot details in the image, and it's hard to copy all of them and keep its structures at the same time, and it is easy spot the point from the image for those experts. – CodyChan Feb 20 at 6:03
  • 1
    @John1024 I've formatted it to text, and the problem is solved. Thanks. – CodyChan Feb 20 at 7:11
  • Very good. Also, glad the problem was solved. – John1024 Feb 20 at 7:14
26

~/.config/fish/functions is a symlink. Therefore it's about [emphasis mine]:

-P
Never follow symbolic links. This is the default behaviour. When find examines or prints information a file, and the file is a symbolic link, the information used shall be taken from the properties of the symbolic link itself.

-L
Follow symbolic links. When find examines or prints information about files, the information used shall be taken from the properties of the file to which the link points, not from the link itself [...]. If -L is in effect and find discovers a symbolic link to a subdirectory during its search, the subdirectory pointed to by the symbolic link will be searched.

(source)

Use find -L. This is an option, not operand; it should appear before path(s).

  • I've added updates. And after adding -L options, it works. Sorry about my mistake, I though fish was a symlink and never pay attention to symlink issue before this post. – CodyChan Feb 20 at 6:51
  • However, be aware that -P is the default for a good reason. Following symlinks can lead you out of your starting filesystem and into loops which find may or may not be able to protect you from. So, use -L with caution (or preferably don't use at all). – jrw32982 Feb 25 at 18:44

Your Answer

By clicking "Post Your Answer", you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.