OSX音乐持续时间

时间:2015-12-28 21:55:11

标签: macos bash

我正在尝试制作一个快速命令,删除所有音乐中包含0秒音乐的音乐文件......

我有这个:

afinfo * -r | grep "estimated duration: " | cut -c 21- | rev | cut -c 4- | rev

这给了我时间,但是我要更改什么才能让它扫描整个系统然后删除0秒?

1 个答案:

答案 0 :(得分:0)

简答

应该能够使用mdfind来执行此操作,但我不确定如果你的歌曲没有被OSX编目和编入索引,它是否会奏效,但是如果它适合你,它比下面更长的答案更容易......

理论上,您可以使用以下命令查找HOME目录下的所有零持续时间歌曲:

mdfind -onlyin $HOME 'kMDItemDurationSeconds=0'

或类似的东西:

mdfind -onlyin $HOME 'kMDItemDurationSeconds<0.01'

如果可以,只列出要删除的歌曲,可以将其与xargs串在一起,删除这样的曲目:

mdfind -onlyin $HOME 'kMDItemDurationSeconds=0' | xargs -I % rm %

长答案

如果您使用此脚本并将其保存在名为DeleteZeroDuration

的文件中
#!/bin/bash
################################################################################
# DeleteZeroDuration
# Mark Setchell
# Delete songs with short duration
#
# Usage:
# DeleteZeroDuration song.mp3
################################################################################
if [ $# -ne 1 ]; then
   echo "Usage:"
   echo "$0 song.mp3|track.m4a"
   exit 1
fi
track="$1"
shorty=$(afinfo "$track" | awk 'BEGIN{short=0} /^estimated duration:/{if($3<0.1)short=1} END{print short}')
if [ $shorty -eq 1 ]; then
   echo "Would delete track: $track"
   # rm "$track"
fi

然后使用以下命令启动终端并使脚本可执行:

chmod +x DeleteZeroDuration

您可以使用

在一两首歌上试一试
./DeleteZeroDuration SomeSong.mp3

它会告诉你它是否会删除曲目,或者如果不删除则不会。它实际上不会删除任何内容,因为倒数第二行中的rm被注释掉了。

当您感到满意时,您可以使用以下命令在HOME目录中的所有歌曲上运行:

find $HOME -iname "*.mp3" -exec ./DeleteZeroDuration {} \;

find $HOME -iname "*.m4a" -exec ./DeleteZeroDuration {} \;

如果这看起来不错,请继续删除#前面的rm "$track",以便实际删除。

小心并首先在实际音乐库的虚拟副本上运行它。