我试图找出通配符进行文件操作.
我有一个目录中的这些文件用于测试目的:
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文件,对吧?).
解决方法
find -name * {.GIF,.gif}是错误的.
这个命令首先被shell抛出,找到-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应该被发送,没有任何shell扩展.并找到将使用它作为模式.这个单引号是必要的,除非你转义shell元字符.在这种情况下,命令看起来就像
find -iname \*.gif