1

I have a file structure something like this:

/apps/base/logs1
and 
/apps/base/logs2

Both logs1 and logs2 folders have .log files with some other files as well.

I am trying to do this From /apps folder I want to be able to find all files (folders and sub-folders) that have the string "ERROR".

This command

 find . -name "*.log" -exec grep -H "ERROR" '{}' \; -print

Works fine and shows me all .log files directly in the folder when I am in the folder /apps/base/logs1 or /apps/base/logs2.

But when I switch to the folder /apps, this command does not yield any results.

Is there anything that I am missing or need to change? I have tried several other options but I can not get it to work.

Any help will be appreciated. Thanks

3
  • 2
    If you run the find command without the -exec, just "find -name '*.log'", does it print out the files you expect to search?
    – Ken Kinder
    Jan 19, 2013 at 0:08
  • @Ken yes it does print the file names when I execute just the find . -name "*.log" command.
    – Ayusman
    Jan 19, 2013 at 0:23
  • What about trying a different command for the sake of troubleshooting? e.g. find . -name "*.log" -execdir ls -l {} \; (N.B. you should use -execdir not -exec for security reasons. See man find.)
    – Sparhawk
    Jan 19, 2013 at 2:52

1 Answer 1

0

ok, got the answer. Since I was on an enterprise environment, there were many symbolic links created. I had to explicitly ask find command to also follow the symbolic links. So the command now looks like this:

find -L /apps -name "*.log" -exec grep -H "ERROR" '{}' \; -print

The problem was directories like logs1 and logs2 were symbolic links, and hence were not followed by the find command. The -L option forces the command to look in the sym links as well.

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.