Raspberry Pi без головы, мой if [[file1 -nt file 2]], который считает, что два файла имеют одинаковую дату изменения

281
BeardyMike

Итак, у меня есть сценарий проигрывателя "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», и даты изменения находятся на расстоянии многих часов.

Есть идеи?

Спасибо!

0

1 ответ на вопрос

1
Scott

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

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

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

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

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

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

Спасибо Скотт! Я все еще довольно новичок в кодировании, как это, если у вас есть время, вы могли бы разбить то, что происходит во втором решении "для б в ...." BeardyMike 5 лет назад 0

Похожие вопросы