2

when I perform

  find /tmp  -name something 

find command not find the something word under /tmp

  echo $?

  I get $?=0

it's OK

but how to enable Exit status diff then 0 when find command not find the something word?

1

2 Answers 2

1

find returns 0 if it runs successfully and non-zero if there are errors. It does not set the exit code based on whether anything was found. You will need to do something like this:

files=$(find /tmp  -name something)
if [[ -n "$files" ]]
then
    echo "files were found"
fi

It's more likely, however, that you want to do something with the filenames. You can process them in a loop:

find /tmp  -name something | while read -r filename
do
    echo "found: $filename
done

or

while read -r filename
do
    echo "found: $filename
done < <(find /tmp  -name something)

If nothing is found then the loop will exit without doing anything.

1

I feel that this is the most concise and direct method:

test "`find /tmp/ -name something -print -quit 2>/dev/null`"
2
  • 1
    This will only work if there's not more than a single match. Double quotes around the backticks should overcome this.
    – Dennis
    Feb 6, 2013 at 19:16
  • Also, I accidentally omitted -print -quit.
    – danorton
    Feb 7, 2013 at 18:19

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .