我试图找出通配符进行文件操作.
@H_404_2@我有一个目录中的这些文件用于测试目的:
file_BSD.GIF file_linux.gif file_unix@H_404_2@看我的ls命令,
$ls *{.GIF,.gif} file_BSD.GIF file_linux.gif@H_404_2@哪个可以 @H_404_2@但是“查找”似乎没有同样的作用:
$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]@H_404_2@顺便说一句,我已经读过“-iname”应该找到大写和小写的文件,但这似乎也不起作用:
$find -iname *.gif ./file_linux.gif@H_404_2@(这也应该找到.GIF文件,对吧?).
解决方法
find -name * {.GIF,.gif}是错误的.
@H_404_2@这个命令首先被shell抛出,找到-name * .GIF * .gif
@H_404_2@然后进一步扩大到
find -name file_BSD.GIF file_linux.gif # as you have only these files in directory@H_404_2@现在这个-name file_BSD.GIF file_linux.gif被传递给find.这是错误的,因为没有像file_linux.gif这样的开关被find接受. @H_404_2@你需要的是这个命令.
find -name '*.GIF' -or -name '*.gif'@H_404_2@哪个是相同的
find -iname '*.gif'@H_404_2@在这里注意单引号(‘).这意味着* .GIF应该被发送,没有任何shell扩展.并找到将使用它作为模式.这个单引号是必要的,除非你转义shell元字符.在这种情况下,命令看起来就像
find -iname \*.gif