我正在尝试制作一个快速命令,删除所有音乐中包含0秒音乐的音乐文件......
我有这个:
afinfo * -r | grep "estimated duration: " | cut -c 21- | rev | cut -c 4- | rev
这给了我时间,但是我要更改什么才能让它扫描整个系统然后删除0秒?
答案 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"
,以便实际删除。
小心并首先在实际音乐库的虚拟副本上运行它。