Итак, у меня есть сценарий проигрывателя "player.sh" и сценарий обновления "updater.sh".

player.sh воспроизводит любой файл mp3 в /home /filepath /, используя подстановочный знак * .mp3, это работает, как и ожидалось.

я хочу, чтобы файл Updater.sh спал в течение 15 секунд, затем подключил USB-накопитель "sda1" к /media /pi, а затем проверил, является ли * .mp3 в /media /pi более новым, чем * .mp3 в домашних условиях. /Путь файла/

Если файл более новый, он запускает воспроизведение mp3, использует RM для очистки всех * .mp3 из /home /filepath /, копирует более новый * .mp3 в /home /filepath /, а затем запускает player.sh для резервного копирования снова в воспроизвести новый файл.

однако, это не делает это ....

#!/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

Я просто получаю терминал, полный "не обновлен".

Независимо от того, что я делаю, сценарий считает, что файлы имеют одинаковую дату изменения, но я проверил файлы, используя "stat", и даты изменения находятся на расстоянии многих часов.

Есть идеи?

Спасибо!

1 ответ1

1

Если вы скажете что-то вроде [[ /dir1/* -nt /dir2/* ]] , оболочка расширится так, чтобы выглядеть

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

Если у вас есть ровно один файл в каждом каталоге, это должно работать ненадежно.  В противном случае команда является бессмысленной и не выполнится.

Вам нужно использовать -nt только для двух файлов одновременно.  Вы можете сделать что-то вроде

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

Кроме того, вы используете & где вы должны использовать && .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .