![Raspberry Pi headless, мой if [[ file1 -nt file 2 ]], который думает, что два файла имеют одинаковую дату изменения](https://rvso.com/image/1567389/Raspberry%20Pi%20headless%2C%20%D0%BC%D0%BE%D0%B9%20if%20%5B%5B%20file1%20-nt%20file%202%20%5D%5D%2C%20%D0%BA%D0%BE%D1%82%D0%BE%D1%80%D1%8B%D0%B9%20%D0%B4%D1%83%D0%BC%D0%B0%D0%B5%D1%82%2C%20%D1%87%D1%82%D0%BE%20%D0%B4%D0%B2%D0%B0%20%D1%84%D0%B0%D0%B9%D0%BB%D0%B0%20%D0%B8%D0%BC%D0%B5%D1%8E%D1%82%20%D0%BE%D0%B4%D0%B8%D0%BD%D0%B0%D0%BA%D0%BE%D0%B2%D1%83%D1%8E%20%D0%B4%D0%B0%D1%82%D1%83%20%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F.png)
Итак, у меня есть скрипт проигрывателя «player.sh» и скрипт обновления «updater.sh».
player.sh воспроизводит любой mp3-файл в /home/filepath/, используя подстановочный знак *.mp3, это работает так, как и ожидалось.
Мне нужно, чтобы updater.sh заснул на 15 секунд, затем смонтировал usb-накопитель "sda1" в /media/pi, а затем проверил, является ли *.mp3 в /media/pi более новым, чем *.mp3 в home/filepath/
Если файл более новый, pkill отключает воспроизведение 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
Если вы скажете что-то вроде [[ /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) …
︙
Кроме того, вы используете . &
там, где следует использовать &&
.