作者:Ai剧_本 | 来源:互联网 | 2023-05-23 14:26
我正在写一些处理一些文件的bash/zsh脚本.我想为某个类型的每个文件执行一个命令,其中一些命令重叠.当我尝试时find -name 'pattern1' -or -name 'pattern2'
,只使用最后一个模式(pattern1
不返回匹配的文件;只匹配文件pattern2
).我想要的是匹配pattern1
或pattern2
匹配的文件.
例如,当我尝试以下操作时,这就是我得到的(仅./foo.xml
发现并打印通知):
$ ls -a
. .. bar.html foo.xml
$ tree .
.
??? bar.html
??? foo.xml
0 directories, 2 files
$ find . -name '*.html' -or -name '*.xml' -exec echo {} \;
./foo.xml
$ type find
find is an alias for noglob find
find is /usr/bin/find
使用-o
而不是-or
给出相同的结果.如果我切换-name
参数的顺序,那么只bar.html
返回而不是foo.xml
.
为什么不bar.html
和foo.xml
找到并归还?我如何匹配多个模式?
1> anubhava..:
您需要在find
命令中使用括号来对条件进行分组,否则只有第二个-name
选项对-exec
命令有效.
find . \( -name '*.html' -or -name '*.xml' \) -exec echo {} \;