find+*的问题
轉自find+*的問題
不久前做移植的時候想把某個目錄下的C文件都找出來,然后拷貝下,結果一直報錯,我用的是*.c作為pattern。今天看論壇的時候知道為什么了。
$ ls?
test2.c ?test.c ?test.txt
目錄下有兩個.c文件,還有一個.txt文件
$ find . -name *.c
error?:?find: 路徑必須在表達式之前: test.c
用法: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
$ find . -name *.txt
./test.txt
$ find . -name "*.c"
./test2.c
./test.c
原因:
若是不加引號 $ find . -name?*.txt?成功,而不加引號的 $ find . -name?*.c?出錯了,得看看shell是怎么執行這句話的,首先shell讀到了 *.txt 和 *.c,因為 * 是shell認為的?meta?(理解為特殊字符),所以就先解釋,*txt 先執行成 test.txt,傳遞給find,find就去執行自己的操作,根據pattern發現符合要求。而 *.c 被shell翻譯成了test.c和test2.c,這時候命令就變成了 find . -name test.c test2.c 這就出錯了!因為find -name 選項后面只能支持一個文件的搜索。所以對于test2.c是前面沒有選項,就報錯了!
對于有引號的 find . -name "*.c",shell讀到"*.c"的時候,會當作參數處理,傳遞給find,find之后會自己處理 *.c,可以查看 man find ,里面有
The metacharacters (`*', `?', and `[]')?match a `.'
轉載于:https://www.cnblogs.com/noble/p/4144192.html
總結
- 上一篇: 静态页分页效果
- 下一篇: 捷微jeewx , 免费开源(java)