Cor*_*lks 6 unix macos bash shell zsh
我正在写一些处理一些文件的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
Run Code Online (Sandbox Code Playgroud)
使用-o
而不是-or
给出相同的结果.如果我切换-name
参数的顺序,那么只bar.html
返回而不是foo.xml
.
为什么不bar.html
和foo.xml
找到并归还?我如何匹配多个模式?
您需要在find
命令中使用括号来对条件进行分组,否则只有第二个-name
选项对-exec
命令有效.
find . \( -name '*.html' -or -name '*.xml' \) -exec echo {} \;
Run Code Online (Sandbox Code Playgroud)