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

本文介绍如何正确使用find命令查找特定模式的文件,包括如何避免shell提前解析通配符导致的问题,并提供了解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   今天执行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  这样就不会报错了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值