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会递归地查找所有子目录,所以如果子目录存在多于一个匹配项的情况,也要加''或者\或者""

奇怪,子目录不会出问题。

 

例子说明:

  1. # 进入tmp目录新建4个文本文件  
  2. # cd /tmp  
  3. # touch {1,2,3,4}.txt  
  4. # find . -name *.txt  
  5. find: paths must precede expression: 2.txt  

 

出现这个提示是因为星号被展开为当前目录下所有的文件,这样的匹配当然会出错。看这个就知道了:

  1. # echo *  
  2. 1.txt 2.txt 3.txt 4.txt  
  3. # echo '*'  
  4. *  
  5. # echo \*  
  6. *  

 

 

想要星号不被展开就需要加上

  • 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

posted @ 2014-08-07 14:53  alxe_yu  阅读(293)  评论(0)    收藏  举报