您的位置:首页 > 其它

find . -name *.c -print 为何出错

2012-03-09 14:38 459 查看
今天执行find . -name *.c -print,想查一下当前目录下的.c的文件, 给出来这个提示

find: paths must precede expression

Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|

exec] [path...] [expression]

当时我就纳了闷了,奇怪,然后我find . -name \*.c -print 加了个转义字符就可以了,

查了下man find 有如下解释

$ find . -name *.c -print

find: paths must precede expression

Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|

exec] [path...] [expression]

This happens because *.c has been expanded by the shell resulting in

find actually receiving a command line like this:

find . -name bigram.c code.c frcode.c locate.c -print

That command is of course not going to work. Instead of doing things

this way, you should enclose the pattern in quotes or escape the wild‐

card:

$ find . -name \*.c -print

也就是说shell会吧*.c展开为 bigram.c code.c frcode.c locate.c 等价于执行find . -name bigram.c code.c frcode.c locate.c -print

当然会报错了 所以加个\屏蔽shell的解释

或者使用$ find . -name ‘*.c’ -print 这样就不会报错了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: