4
votes

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.

1

1 Answers

15
votes

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.