Primeiro instale mp3info
, ele deve estar nos repositórios de sua distribuição (você não disse, então eu suponho que você esteja usando algum tipo de Linux). Se você tem uma distribuição baseada no Debian, você pode fazê-lo com
sudo apt-get install mp3info
Quando o mp3info
estiver instalado, você poderá pesquisar o diretório music
para músicas de um determinado tamanho com este comando:
find music/ -name "*mp3" |
while IFS= read -r f; do
length=$(mp3info -p "%S" "$f");
if [[ "$length" -ge "180" && "$length" -le "195" ]]; then
echo "$f";
fi;
done
O comando acima irá procurar music/
para arquivos mp3, e imprimir seu nome e comprimento se esse comprimento for maior ou igual a 180 segundos (3:00) e menor ou igual a 195 segundos (3:15). Veja man mp3info
para mais detalhes sobre o formato de saída.
Se você quiser inserir horários no formato MM: SS, fica um pouco mais complexo:
#!/usr/bin/env bash
## Convert MM:SS to seconds.
## The date is random, you can use your birthday if you want.
## The important part is not specifying a time so that 00:00:00
## is returned.
d=$(date -d "1/1/2013" +%s);
## Now add the number of minutes and seconds
## you give as the first argument
min=$(date -d "1/1/2013 00:$1" +%s);
## The same for the second arument
max=$(date -d "1/1/2013 00:$2" +%s);
## Search the target directory for files
## of the correct length.
find "$3" -name "*mp3" |
while IFS= read -r file; do
length=$(mp3info -p "%m:%s" "$file");
## Convert the actual length of the song (mm:ss format)
## to seconds so it can be compared.
lengthsec=$(date -d "1/1/2013 00:$length" +%s);
## Compare the length to the $min and $max
if [[ ($lengthsec -ge $min ) && ($lengthsec -le $max ) ]]; then
echo "$file";
fi;
done
Salve o script acima como findmp3
e execute-o assim:
findmp3 3:00 3:15 music/