是的,我正在整理音乐。我按照下面的口头禅安排了所有东西:/Artist/Album/Track - Artist - Title.ext
如果有的话,把它放进去/Artist/Album/cover.(jpg|png)
。
我想浏览所有第二级目录,找到没有封面的目录。在第二层,我的意思是我不在乎是否/Britney Spears/
没有cover.jpg,但我不在乎是否/Britney Spears/In The Zone/
没有Cover.jpg 。
不用担心封面下载(明天对我来说是个有趣的项目),我只关心一个反面find
例子的光荣的bash-fuiness 。
很简单,就可以了。以下内容带有封面,并与所有第二级目录的列表进行比较。两个“文件”中出现的行均被删除,留下需要覆盖的目录列表。
comm -3 \
<(find ~/Music/ -iname 'cover.*' -printf '%h\n' | sort -u) \
<(find ~/Music/ -maxdepth 2 -mindepth 2 -type d | sort) \
| sed 's/^.*Music\///'
万岁。
笔记:
comm
的参数如下:
-1
取消file1特有的行-2
取消file2特有的行-3
禁止出现在两个文件中的行comm
只接受文件,因此是怪异的<(...)
输入法。这将通过真实的[临时]文件传输内容。
comm
需要排序的输入,否则将不起作用,find
也绝不能保证订单。它也必须是唯一的。第一个find
操作可以找到多个文件,cover.*
因此可能有重复的条目。sort -u
很快将那些皱成一团。第二个发现总是将是唯一的。
dirname
是一种无需借助即可获取文件目录的便捷工具sed
。
find
并且comm
它们的输出都有些混乱。最后sed
就是清理东西,这样你就剩下了Artist/Album
。这可能对您来说可能是不可取的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句