Dave
Dave

Reputation: 4328

Why does the error "find: paths must precede expression" trigger when multiple results are returned from "find"

Why does the error find: paths must precede expression: input.txt trigger when multiple results are returned from "find" in subprocess but not when a single result is returned?

The dir contains three files.

ls
input2.txt  input.txt  input.log 

There is only one file matching the find query and the result can be assigned to $foo

$ foo=$(find . -name *.log )
echo $foo
./plot.log

When > 1 reults are returned find throw's an error.

$ foo=$(find . -name *.txt )
find: paths must precede expression: input.txt

I don't understand why this is happening.

Upvotes: 4

Views: 24532

Answers (1)

l0b0
l0b0

Reputation: 58988

You need to quote special characters, because globs are expanded before running the command:

find . -name '*.txt'

To see how globbing works, try for example echo *.txt - it will only actually print *.txt if there are no files in the current directory ending with .txt.

Upvotes: 15

Related Questions