学习Linux的时候,阅读的教程的作者特别提醒到:Linux系统下的find命令虽然很强大,但是新手用起来很容易出问题。当时我还不信:不就是个查找吗?结果真到用的时候才发现,find的用法其实真的挺“坑”的。(我用的CentOS 7)
操作目的很简单:找到主目录(~)下的所有.html后缀的文件,.c后缀的文件等。
这里我就把我所有出过的错分享出来了,大家有则共勉,无则笑笑。
OK,我们分析一下,.html文件是吧,正则匹配find ~ *.html走起!
然后就出错了……好吧我们仔细读一下教材,find用法明确规定,查找特定名称(包括正则匹配)的文件必须使用-name参数……这可不是英语造句子,直接find xxx是没用的!
好吧,
$ find ~ -name *.html
OK,没问题,再看看教材实例:
下面的命令查找主目录下文件名为sample或者以.old结尾的文件:
$ find ~ \( -name sample -o -name '*.old' \)
原来\( )\功能是这么跟正则匹配一起用的啊,我试试
$ find ~ -name \(*.html\)
find: 路径必须在表达式之前: *.html
好吧,我又写错了,-name应该放在转义括号内
$ find ~ \(-name *.html\)
find: ‘(-name’: 没有那个文件或目录
find: ‘*.html)’: 没有那个文件或目录
WTF?这又是什么错误?
原来教程上写着,\(和\)以及逻辑参数-o等前后都要加括号,再来
$ find ~ \( -name '*.html' \)
终于成功了。
顺便说一下,文件名可以不加引号,结果一样(我是按照教程示例写的)。