Salvando nomes de arquivos que são reproduzidos atualmente
Como o comando play
termina após a reprodução de um único arquivo, o que podemos fazer é usar xargs
e fornecer play
de um lote de arquivos. Removeremos cada arquivo, um de cada vez. e ecoá-lo para arquivar e reproduzir o arquivo depois. O script editado seria semelhante abaixo. Observe que aqui são adicionadas opções adicionais e o comando IFS= read -d'' -r
para lidar com nomes de arquivos de maneira segura.
#!/bin/bash
# create file for playing songs first
echo > playlist.txt
# Now play each song and echo filename to file
find ./ -type f -print0 | sort -z -R | while IFS= read -d '' -r filename
do
clear
echo "$filename" >> playlist.txt
play "$filename"
done
A vantagem dessa abordagem é que os nomes dos arquivos entrarão no playlist.txt enquanto são reproduzidos, o que nos permite rastrear a saída do script em tempo real com algo como tail -F playlist.txt
.
OBSERVAÇÃO : para evitar que playlist.txt
seja listado no comando find
de alteração de saída find
da seguinte forma:
find ./ -type f -not -name "playlist.txt" -print0
Além disso, se quisermos garantir que somente .mp3
arquivos sejam listados, podemos fazer isso:
find ./ -type f \( -not -name "playlist.txt" -and -name "*.mp3" \) -print0
Salvando lista de arquivos encontrados para serem reproduzidos
Se nosso objetivo é proteger a lista de arquivos antes de ser reproduzido, não há muita ciência - o pipeline find-sort pode ser gravado primeiro, e esse arquivo pode então ser alimentado para play
via xargs
ou novamente via while IFS= read -r ; do ... done
structure
#!/bin/bash
find ./ -type f -print0 | sort -z -R > playlist.txt
while IFS= read -d '' -r filename
do
clear
play "$filename"
done < playlist.txt