Raspberry Pi headless, meu if [[file1 -nt file 2]] que acha que os dois arquivos têm a mesma data de modificação

0

Então eu tenho um script de jogador "player.sh" e um script de atualização "updater.sh".

player.sh toca qualquer arquivo mp3 em / home / filepath / usando um curinga * .mp3, isso funciona como esperado.

o que eu quero é que o updater.sh durma por 15 segundos, então monte o drive usb "sda1" em / media / pi e verifique se o * .mp3 em / media / pi é mais recente que o *. mp3 em casa / filepath /

Se o arquivo é mais novo, ele reproduz o mp3, usa o RM para limpar todos os arquivos * .mp3 do / home / filepath /, copia o mais novo * .mp3 para o / home / filepath / e inicia o player.sh de volta novamente para reproduzir o novo arquivo.

no entanto, isso não acontece ...

#!/bin/bash
while [ 1 ] ; do
sleep 15
sudo mount /dev/sda1 /media/pi
if [[ /media/pi/*.mp3 -nt /home/filepath/*.mp3 ]] ; then sudo pkill mpg123 & sudo rm /home/filepath/* & cp /media/pi/*.mp3 /home/filepath/ & sh /home/filepath/player.sh & echo "updated"
else echo "not updated"
fi
sudo amount -l /media/pi
done

Acabei de receber um terminal cheio de "não atualizado".

Não importa o que eu faça, o script acha que os arquivos têm a mesma data de modificação, mas eu verifiquei os arquivos usando "stat" e as datas modificadas estão separadas por muitas horas.

Alguma idéia?

Obrigado!

    
por BeardyMike 07.08.2018 / 00:21

1 resposta

1

Se você disser algo como [[ /dir1/* -nt /dir2/* ]] , o shell expandirá para parecer

[[ /dir1/f1 /dir1/f3 … -nt /dir2/f2 /dir2/f3 … ]]

Se você tiver exatamente um arquivo em cada diretório, isso deve funcionar precariamente. Caso contrário, o comando é um absurdo e falhará.

Você precisa usar -nt em apenas dois arquivos por vez. Você pode querer fazer algo como

for b in /home/filepath/*.mp3
do
    b_base="${b##*/}"
    if [[ /media/pi/"b_base" -nt "$b" ]] ; then (do something) …
            ︙

Além disso, você está usando & , onde você deve usar && .

    
por 07.08.2018 / 02:28