10.7 当表达式中只有一个为true时就显示结果(OR)
find -o
在10.4节中,可以使用find
命令,把London Calling中大小为10 MB的Clash的所有歌曲文件都找出来,而且也可以使用find
命令把London Calling中大小超过10 MB的歌找出来,但是用-size
选项不能二者兼得。在10.6节中,-a
选项使用AND
来组合选项。不过,也可以使用-o
(或-or
)选项,用OR
来组合各个选项。
因此,为了从London Calling中查找文件大小等于或大于10 MB的歌曲文件,可以使用以下命令:
$ cd London_Calling
$ find . -size +10M -o -size 10M
03_-_Jimmy_Jazz.ogg
07_-_The_Right_Profile.ogg
08_-_Lost_In_The_Supermarket.ogg
09_-_Clampdown.ogg
12_-_Death_Or_Glory.ogg
15_-_Lover's_Rock.ogg
18_-_Revolution_Rock.ogg
(25th_Anniversary)_-_18_-_Revolution_Rock.mp3
(25th_Anniversary)_-_37_-_Heart_And_Mind.mp3
(25th_Anniversary)_-_ 39_-_London_Calling_(Demo).mp3
哎呀,搜索结果中还包括London Calling的25周年纪念版,我们不想要这个。现在需要做两件事:一是从结果中排除25周年纪念版的信息,二是确保OR
语句运行正常。
要排除25周年纪念版的歌曲,在命令行的末尾增加!-name "*25*"
。要确保OR
语句运行正常,需要用括号把它括起来,对语句进行组合。不过,需要使用反斜杠(\
)对括号进行转义,这样shell才不会误解它们,而且还需要在语句前后都留下空格。组合后的命令如下所示:
$ cd London_Calling
$ find . \( -size +10M -o -size 10M \) ! -name
"*25*"
03_-_Jimmy_Jazz.ogg
07_-_The_Right_Profile.ogg
08_-_Lost_In_The_Supermarket.ogg
09_-_Clampdown.ogg
12_-_Death_Or_Glory.ogg
15_-_Lover's_Rock.ogg
18_-_Revolution_Rock.ogg
好极了。有7首大小等于或超过10 MB的歌。
说明 有关London Calling的更多信息,可以访问Allmusic.com(www.allmusic.com/cg/amg.dll?p=amg&sql=10:aeu1z82ajyvn)或Pitch- fork (www.pitchforkmedia.com/record-reviews/c/clash/london-calling.shtml)。
也可以用-o
找出music盘中有多少首歌。从/media/music
的根目录下运行命令,并使用-a
选项(耐心点,一会就要使用-o
了),如下所示:
$ find . -name "*mp3*" -a -type f | wc -l
23407
23 000个结果? 结果不对。刚才只搜索了mp3文件,而大量歌曲是以更高级的Ogg Vorbis格式编码的(这是一种可以取代mp3的、专利免费的开源格式)。搜索mp3或ogg文件,并用wc l
统计结果,如下所示:
$ find . \( -name "*mp3*" -o -name "*.ogg*" \) -a
➥-type f | wc -l
41631
看起来好多了,但还有一些FLAC文件没有包括进来。再添加一个-o
选项,如下所示:
$ find . \( -name "*mp3*" -o -name "*.ogg*" -o -name
➥"*.flac*" \) -a -type f | wc -l
42187
现在得到的结果更棒了:有42 000首歌,而且数量还在增长。