10.8 当表达式为not true时显示结果(NOT)

find -n

本章前面几节使用叹号(!)来对表达式进行取反(参见10.2节和10.7节),现在进一步看看这个操作符。在10.7节中,使用find命令确定在music盘中有多少个mp3、ogg和flac文件,但这个盘中总共有多少个文件呢?

  1. $ find . -name "*" | wc -l
  2. 52111

嗯,总共有52 000多个文件,但其中只有42 000个是mp3、ogg或flac之类的文件,其他是什么文件呢?再创建一个find命令,将以.mp3、.ogg或.flac为后缀的文件,还有目录排除掉。用括号把这4个条件括起来,然后在命令前面放一个叹号(!),表示要否定这些条件,实际要搜索的是与这些指定的条件不匹配的结果,如下所示:

  1. $ find . ! \( -name "*mp*" -o -name "*ogg" -o
  2. ➥-name "*flac" -o -type d \)
  3. ./Folk/Joan_Baez/Joan_Baez_-_Imagine.m3u
  4. ./500_Greatest_Singles/singles.txt
  5. ./Blues/Muddy_Waters/Best_Of.m3u
  6. ./Blues/Robert_Johnson/Hellhound_On_My_Trail.MP3
  7. ./Blues/Johnny_Winter/Johnny_Winter.m3u [Results
  8. truncated for length]

现在找到答案了,或者至少正在获得答案。结果中有m3u(播放目录)文件、文本文件以及后缀是MP3而不是mp3的文件(还有JPEG、GIF和音乐视频文件)。和所有Linux命令一样,find命令也是区分大小写的(如第1章所述),所以搜索*mp3*时,并不会搜索到后缀为.MP3的文件。有什么又快又简单的办法能够修改这些文件,让它们的扩展名都变成正确的小写格式呢?当然有,还是用find命令完成这个任务。