No meu .bashrc eu tenho uma função que uso para reproduzir vÃdeos aleatórios (não escritos abaixo, apenas para sua informação) e outra para todos os arquivos de mÃdia, por exemplo:
createmediafiles() {
find ~+ -type f -iregex '.*\.\(mp3\|wav\|ogg\|flac\|mp4\|mov\|avi\)' > ~/mediafiles.txt
find ~+ -type d -name VIDEO_TS >> ~+/mediafiles.txt
}
playmediafiles() {
while true; do
while read -r line; do
shuf -n 1 |
tee -a ~/played-log.txt |
xargs -d "\n" mpv
done < ~/mediafiles.txt
done
}
Quero adicionar a linha VIDEO_TS a createmediafiles
, mas na playmediafiles
função quero adicionar uma instrução IF, de modo que, se a linha embaralhada mediafiles.txt
for um VIDEO_TS, em vez de usar mpv para reproduzir um arquivo, isso servirá:
tee -a ~/played-log.txt | xargs -d "\n" vlc --fullscreen
A tubulação é mediafiles.txt
lida da mesma maneira que faz com o mpv.
Como faço para jogar isso em uma instrução IF com a condição de que a linha termine em VIDEO_TS?
Acho que você pode estar tentando fazer algo assim:
ou:
O primeiro script faz um loop eterno chamando
shuf
para selecionar 1 linha por vez aleatoriamentemediafiles.txt
e armazenar essa linha na variávelline
.O segundo script faz um loop eterno chamando
shuf
para imprimir todo o conteúdomediafiles.txt
em uma ordem aleatória e, em seguida, tem um segundo loop pararead
uma linha por vez dashuf
saÃda e armazena essa linha na variávelline
.Ambos testam
$line
para ver se contémVIDEO_TS
ou não e preenchem acmd
matriz com o comando apropriado mais argumentos usandocmd=( 'echo' 'vlc' '--fullscreen' )
oucmd=( 'echo' 'mpv' )
. Eles então adicionam o conteúdo deline
ao final do array usandocmd+=( "$line" )
e, em seguida, imprimem o conteúdo do arrayplayed-log.txt
e executam o comando armazenado no array com"${cmd[@]}"
.A única diferença entre os 2 é que o primeiro gera um subshell para chamar
shuf
uma vez por arquivo a ser reproduzido, enquanto o segundo gera um subshell para chamarshuf
uma vez para todo o arquivo de entrada e depoisread
uma vez por linha a ser reproduzido. O segundo provavelmente será um pouco mais rápido, mas duvido que você perceba ou se importe, já que está reproduzindo mÃdia entre cada linha de entrada.Remova o
'echo'
s quando terminar o teste para ter certeza de que ele faz o que você deseja.