在find和ls上使用通配符

Juan Pablo Barrios:

我试图找出通配符来执行文件操作。

我将这些文件放在目录中以进行测试:

file_BSD.GIF  file_linux.gif  file_unix

见我的ls命令,

$ ls *{.GIF,.gif}
file_BSD.GIF  file_linux.gif

没关系

但是“查找”似乎并非以相同的方式工作:

$ find -name *{.GIF,.gif}
find: paths must precede expression: file_linux.gif
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]

顺便说一句,我读过“ -iname”应该同时找到大写和小写文件,但这似乎也不起作用:

$find -iname *.gif

./file_linux.gif

(这也应该找到.GIF文件,对吗?)。

Shiplu Mokaddim:

find -name *{.GIF,.gif} 是错的。

此命令首先由shell扩展为 find -name *.GIF *.gif

然后进一步扩展到

find -name file_BSD.GIF  file_linux.gif 
# as you have only these files in directory

现在将-name file_BSD.GIF file_linux.gif其传递给find这是错误的,因为没有file_linux.gif被find接受的开关

您需要的是此命令。

find -name '*.GIF' -or -name '*.gif'

与...相同

find -iname '*.gif'

请注意'此处的单引号()。它的意思是*.GIF应该直接发送查找内容,而无需任何外壳扩展。并且查找将使用此作为模式。除非您转义外壳元字符,否则必须使用单引号。在这种情况下,命令看起来像

find -iname \*.gif

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章