使用不同文件夹中的文件将某些文件信息输出到文本文件

我正在使用OS Xterminal,它有一个叫做“afinfo”的命令,它输出audio文件的信息。 在这种情况下,我想要我的歌曲的比特率信息,所以我做以下几点:

MBP:$ afinfo 01\ Strangers\ To\ Ourselves.aiff | grep "bit rate" bit rate: 1411200 bits per second 

太棒了,所以我现在知道那首歌的比特率。 很明显,我可以用这个来获取该目录中每首歌的信息:

 MBP:$ afinfo * | grep "bit rate" bit rate: 271000 bits per second bit rate: 320000 bits per second bit rate: 248000 bits per second bit rate: 320000 bits per second bit rate: 251000 bits per second 

我想要做的是写一个脚本,只输出歌曲名称和比特率在320000比特率的文本文件。 现在,如果我只是在这个文件夹中的文件,我可以使用grep "File:\|bit rate"并把它放到我的文本文件>> sometext但我不确定如何编写的if语句,和我的图书馆是这样组织的:

 Music Folder | \----- Artist1 | \-------Album1 | \-------song1 \-------song2 ... 

所以我需要帮助浏览所有的子文件夹,并使用他们所有的afinfo。 我一直在阅读Linux +学习指南(LPIC-1),但还没有完全掌握脚本。

任何帮助将非常感激!!!

编辑:在一个文件中添加完整的输出为afinfo:

 MBP:$ afinfo 01\ Lampshades\ On\ Fire.mp3 File: 01 Lampshades On Fire.mp3 File type ID: MPG3 Num Tracks: 1 ---- Data format: 2 ch, 44100 Hz, '.mp3' (0x00000000) 0 bits/channel, 0 bytes/packet, 1152 frames/packet, 0 bytes/frame no channel layout. estimated duration: 187.768150 sec audio bytes: 7510726 audio packets: 7188 bit rate: 320000 bits per second packet size upper bound: 1052 maximum packet size: 1045 audio data file offset: 191565 optimized ---- 

所以你看,我只对这个场景的File:和bit rate:string感兴趣。 我正在考虑使用grep将比特率转换成一个variables,然后以某种方式在IF语句中使用它,但我有一种感觉对于我正在尝试做的事来说过于复杂。

你可以使用find:

 find . -type f -exec afinfo {} + 

这将找到文件递归和尽可能多的文件名称调用afinfo ,输出将stdout。

如果您的目录包含不是音频文件的文件,例如。 .DS_Store等,你可以过滤已知的文件扩展名:

 find . -type f \( -name '*.mp3' -o -name '*.flac' \) -exec afinfo {} + 

但所有的文件扩展名可能不知道在这种情况下重定向stderrafinfo将输出Fail: AudioFileOpenURL failed当指定的文件不是音频文件)到/dev/null将抑制所述错误:

 find . -type f -exec afinfo {} + 2> /dev/null | ... 

你现在可以管道awk来获得预期比特率的文件:

 ... | awk '/File:/ {$1="";f=$0}/bit rate:/ && $3 < 320000{print f}' 

以上将打印比特率<320000的文件的文件名