ls命令和find命令通配符和双引号的使用区别

ls -l ab*
find . -name “abc*”

这里的*都是shell的文件通配符,包括 * ? []

首先文件通配符和正则表达式含义是不同的。最大的差别在于:
1."*" 在正则表达式中表示前面的字符重复任意次数,所以表示任意字符串".*", shell通配符中* 就表示任意字符串
2. ".“在正则表达式中是任意一个字符,在通配符中没有其他任何含义,在通配符中”?"表示一个任意的字符

shell 本身会对*进行解析,所以如果不希望shell解析"*", 就一定要把通配符用双引号括起来(单引号使用后,就什么都替换不了)

ls -l ab* 这个*由shell来解析的,假如目录下面有ab1 abc ab2, 那这个命令首先会被shell转化为ls -l ab1 abc ab2。 ls本身没有解析通配符的能力。
ls -l “ab*”, 那就会什么都没有,因为没有一个文件的名字是ab*

find . -name "abc*"这个参数会原封不动的传给find, find命令本身具备解析通配符的能力,会在当前目录下面的各级目录下面寻找以abc开头的文件。
find . -name abc* 那通配符会被shell解析,如果当前目录下没有以abc开头的文件,那传给find命令的就是空的,相当于:
find . -name
find: missing argument to `-name’

如果当前目录下游多个abc开头的文件,会出错,相当于:
find . -name abc1 abc2
find: paths must precede expression: abc2 就是说第二个name前面没有指定寻找的路径,

如果当前目录下面只有一个abc开头的文件,那就不会出错,但是相当于:
find . -name abc1
最终最在所有的目录下面搜索abc1的文件,和我们的本意大相径庭。

记住,-name选项搜索的是basename,不要再里面带"/"

再提一下grep. grep [-option] pattern file
这里的pattern是正则表达式,必须用双引号 括起来,否则被shell解析。file部分没有pattern,所以grep自己的文件是没有解析能力的,file里面如果有通配符,必须由shell解析,可见得文件部分的通配符必须没有双引号。
grep -i “main.*hello” .c
在当前的目录下的所有的c源文件中搜索同时含有main和hello的语句
shell本身的文件通配符解析的能力比较弱,只对当前目录下的文件有效。
要想对多层目录有效:
grep -r ‘hello’ /home/gigi
但是这个不能指定文件的名称,再指定文件名称的pattern
find /home/gigi -name '.c’ -print0 | xargs -0r grep -H ‘hello’
grep -rH --include=’*.c’ ‘hello’ /home/gigi
--------------------- 
作者:hardcareer 
来源:CSDN 
原文:https://blog.csdn.net/hardcareer/article/details/89024352 
版权声明:本文为博主原创文章,转载请附上博文链接!

 

 

问:

ls后面的对象如果加了双引号,*就变成了普通字符。 SUSE11SP1_MWQ_TEST1:/test # ls test* test test1 test10 test2 test3 test5 test6 test7 test8 test9 SUSE11SP1_MWQ_TEST1:/test # ls "test*" ls: cannot access test*: No such file or di...

答:


首先记住一点, 不加引号的 * 首先会被bash进行扩展,所以 ls test* 在执行 ls 命令前,bash先把 test* 替换成了 test1 test2 ... 然后 ls 命令看到的参数实际上是 test1 test2 ..., 加了引号,bash就不去做替换了,那么 ls 命令看到的参数就是  test*

同理, find 命令看到的参数是 -name test*  还是 -name test1 test2 ... 是有你是否给*加引号决定的。特别注意一点, find 命令的 -name 后面的参数是支持 * 做通配符的 (当然此时你要让find能收到命令参数中的*,所以必须加引号确保*不被bash预先扩展掉),这是 find 命令自带的功能。其他命令可能并不支持,比如ls就不支持。

搞清楚 * 到底是在什么时候被处理的,是你理解这个问题的关键。
--------------------- 
作者:sunxiaopengsun 
来源:CSDN 
原文:https://blog.csdn.net/sunxiaopengsun/article/details/72764718 
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值