2016-08-08 18 views
0

私はこれら3つのfindコマンドの結果が、私が現在いるディレクトリによって異なるのはなぜですか?あなたはこのLinux findコマンド:奇妙な振る舞い

find /home/daniel/workspace/service/tests/smoke -name "*.test" 

のような名前を引用符で囲む必要がある

[email protected]:~$ find /home/daniel/workspace/service/tests/smoke -name *.test 
(result: lists all files named *.test as expected) 

[email protected]:~/workspace$ find /home/daniel/workspace/service/tests/smoke -name *.test 
find: paths must precede expression: service_real_all_tests_possible.test 
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression] 

[email protected]:~/workspace/service$ find /home/daniel/workspace/service/tests/smoke -name *.test 
/home/daniel/workspace/service/tests/smoke/doc.test 
+1

あなたが '*'を引用しなかったので、あなたのシェルはまずそれを展開します。 – melpomene

+0

[shellcheck](http://www.shellcheck.net)を試してみてください。このようなシェルの奇妙さを指摘しています –

答えて

2

そうでない場合、シェルはグロブ展開を行っています。

0

異なる動作は、現在のディレクトリ(サブディレクトリではない)内のいくつのファイルが*.testに一致するかによって異なります。

0 matches => find command is executed like you intended 
1 match => find command will only look for files with the same name as the *.test in your current dir. 
>1 match => Your find command is incorrect 
# ignoring special cases like a filename `-name something.test` 

修正:引用符で*.testを入れたり\*.testを書きます。