在这个演示中,我为删除相册目录中不需要的文件提供了便利。
在这个系列中,我正在开发几个脚本来帮助清理我的音乐收藏。在上一篇文章中,我们用创建的框架来分析音乐文件的目录和子目录,检查以确保每张专辑都有一个cover.jpg ,并记录任何其他不是FLAC、MP3或OGG的文件。
我发现了一些明显可以被删除的文件--我看到奇怪的foo ,还有一堆PDF、PNG和JPG,都是专辑封面。考虑到这一点,并考虑到清除杂物的任务,我提供了一个改进的脚本,它使用Groovy地图来记录文件名和它们出现的次数,并以CSV格式打印。
开始用Groovy进行分析
他们会确保你了解我的音乐目录的预定结构,那篇文章中创建的框架,以及如何拾取FLAC、MP3和OGG文件。在这篇文章中,我便于删除专辑目录中不需要的文件。
框架和专辑文件的分析位
从代码开始。和以前一样,我在脚本中加入了注释,反映了我通常给自己留下的(相对简略的)"注释说明"。
1 // Define the music libary directory
2 // def musicLibraryDirName = '/var/lib/mpd/music'
3 // Define the file name accumulation map
4 def fileNameCounts = [:]
5 // Print the CSV file header
6 println "filename|count"
7 // Iterate over each directory in the music libary directory
8 // These are assumed to be artist directories
9 new File(musicLibraryDirName).eachDir { artistDir ->
10 // Iterate over each directory in the artist directory
11 // These are assumed to be album directories
12 artistDir.eachDir { albumDir ->
13 // Iterate over each file in the album directory
14 // These are assumed to be content or related
15 // (cover.jpg, PDFs with liner notes etc)
16 albumDir.eachFile { contentFile ->
17 // Analyze the file
18 if (contentFile.name ==~ /.*\.(flac|mp3|ogg)/) {
19 // nothing to do here
20 } else if (contentFile.name == 'cover.jpg') {
21 // don't need to do anything with cover.jpg
22 } else {
23 def fn = contentFile.name
24 if (contentFile.isDirectory())
25 fn += '/'
26 fileNameCounts[fn] = fileNameCounts.containsKey(fn) ? fileNameCounts[fn] + 1 : 1
27 }
28 }
29 }
30 }
31 // Print the file name counts
32 fileNameCounts.each { key, value ->
33 println "$key|$value"
34 }
这是对原始框架的一组相当直接的修改。
第3-4行定义了fileNameCount ,一个用于记录文件名计数的地图。
第17-27行分析文件名。我避免任何以.flac 、.mp3 或.ogg 结尾的文件,以及cover.jpg 文件。
第23-26行记录文件名(作为fileNameCounts 的键)和计数(作为值)。如果该文件实际上是一个目录,我会附加一个/ ,以帮助在删除过程中处理它。注意第26行,Groovy映射,像Java映射一样,需要在递增值之前检查键的存在,这与例如awk编程语言不同。
就这样吧!
我按如下方式运行。
$ groovy TagAnalyzer4.groovy > tagAnalysis4.csv
然后,我通过导航到工作表菜单并选择从文件插入工作表,将生成的CSV加载到LibreOffice电子表格中。我将分隔符设为&$124; 。

我按照列数的递减顺序对其进行了排序,以强调屡教不改者。还要注意的是,在第17-20行,有一堆提及专辑名称的M3U文件,可能是由一些用心良苦的翻录程序创建的。我还看到,在更远的地方(未显示),像fix 和fixtags.sh 这样的文件,证明以前曾努力清理一些问题,并在这个过程中留下了其他垃圾。我使用find 命令行工具来摆脱其中的一些文件,大致是这样的。
$ find . \( -name \*.m3u -o -name tags.txt -o -name foo -o -name .DS_Store \
-o -name fix -o -name fixtags.sh \) -exec rm {} \;
我想我也可以用另一个Groovy脚本来做这个。也许下一次吧。