find * '' \ ""
error:
find: paths must precede expression: xxx
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
如果你使用了 * 在参数里面, 比如 find . -name *.txt , 而且 . 目录下有多于一个的匹配项,那么就会出现上面的错误,这个错误的根源是 * 会被展开, 比如那里有1.txt 和 2.txt, 那么你执行 find . -name *.txt 就会变成 find . -name 1.txt 2.txt, 这显然是错误的, 2.txt显然是一个find无法解释的参数。 解决办法就是不让*展开, 要加单引号''或者反斜杠\或者双引号"", 就是写成
find . -name '*.txt' 或者
find . -name '*'.txt 或者
find . -name \*.txt 或者
find . -name "*".txt 或者
find . -name "*.txt"
注意: 因为find会递归地查找所有子目录,所以如果子目录存在多于一个匹配项的情况,也要加''或者\或者""
奇怪,子目录不会出问题。
例子说明:
- # 进入tmp目录新建4个文本文件
- # cd /tmp
- # touch {1,2,3,4}.txt
- # find . -name *.txt
- find: paths must precede expression: 2.txt
出现这个提示是因为星号被展开为当前目录下所有的文件,这样的匹配当然会出错。看这个就知道了:
- # echo *
- 1.txt 2.txt 3.txt 4.txt
- # echo '*'
- *
- # echo \*
- *
想要星号不被展开就需要加上
- find . -name '*.txt'
- ./4.txt
- ./2.txt
- ./3.txt
- ./1.txt
- #或者使用反斜杠
- find . -name \*.txt
- ./4.txt
- ./2.txt
- ./3.txt
- ./1.txt
http://blog.csdn.net/zhuying_linux/article/details/7610416

浙公网安备 33010602011771号