path must precede expression错误

当前目录有文件a.txt ,e.txt,test.txt,secure

1) find . -name *t

   出错: 返回"path must precede expression"

2) find . -name *e

   返回secure文件

3) find . -name "*txt"

   返回所有txt文件

4) find . -name *[t]*

   出错: 同1

5) find . -name "*[t]*" 或 find . -name *\[t\]*

   返回所有文件名含有t字符的文件

问题1:为什么第一种*t出错,而*e却可以执行?

问题2:为什么*t和*[t]*不可以,必须加括号,是不是表达式扩展的问题?

           如果被扩展了,真正传给shell的是什么内容?

find命令中*号的疑惑


這扯到 wildcard 的"擴展"功能,
若在路逕上有多個名稱符合 wildcard ,那就會被擴展為多個路逕。
如 1.txt 2.txt 3.txt 在 [12].txt 中會被擴展為 1.txt 2.txt 。
然而,find -name 後面只能指定一個 name ,
若 -name *.txt 被擴展為 -name 1.txt 2.txt 3.xt 的話,那在 syntax 上就會出錯。


我再解释一下:
-name后面只能跟一个文件名。如果有多个出现就会报错:
引用: path must precede expression
认为你的语法不对。
因为你的目录里有不只一个以t结尾的文件,所以你实际执行的命令是:
find . -name a.txt b.txt
这样是不符合find的语法的。
建议再看一下find的man page。正确的用法是:
find . -name "*t"

不管是find  还是grep  大家似乎都很不愿意加双引号或单引号    这样的话shell当然插一腿了    劝大家还是不要偷懒吧
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值