文章出處:http://zhousir1991.diandian.com/page/4
[root@my ~]# find . -name *.rpm
./Nessus-4.0.1-es5.i386.rpm
[root@my ~]# find . -name *.tar.gz
find: paths must precede expression: recordmydesktop-0.3.8.1.tar.gz
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
[root@my ~]# find . -name '*.tar.gz'
./gtk-recordmydesktop-0.3.8.tar.gz
./recordmydesktop-0.3.8.1.tar.gz
以上是本人遇到的問題,加了單引號之後解決:網上找到相關資料得以解決,引自互連網, 著作權問題請聯絡本人!
find / -name mysql* 中 -name的參數並不是實際的 mysql* ,而是shell 先解析msyql* ,如果在目前的目錄能找到mysql開頭的檔案名稱或者目錄名,將匹配後的檔案名稱或者目錄名作為name的參數傳給它,分以下三種情況:
1、假如當沒有可匹配的shell將 mysql* 傳給find;
2、假如只匹配到一個會正常執行find命令,但是結果是錯誤的,比如目前的目錄只有mysqla一個目錄或者檔案,shell會將 mysqla 作為name的參數傳給find,然後執行命令;
3、假如匹配到多個就會報錯,錯誤提示如下:
find: paths must precede expression
Usage: find [-H] [-L] [-P] [path...] [expression]
也就是說當有多個檔案或者目錄被匹配時,shell會將被匹配的所有檔案或者目錄名作為name的參數傳給find,這樣就致使find無法正常執行。比如目前的目錄有mysqla
, mysqlb 裡面檔案,shell匹配後的命令列是find / -name mysqla mysqlb ,這樣find就無法正常執行。
而find / -name “mysql*” ,shell不會解析 mysql* 這個運算式,直接將mysql* 傳給find,find會正常執行,並且得到你想要的結果。
總結:在以後的shell使用過程中應力求嚴謹!