当前目录有文件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 还是grep 大家似乎都很不愿意加双引号或单引号 这样的话shell当然插一腿了 劝大家还是不要偷懒吧
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当然插一腿了 劝大家还是不要偷懒吧