Raspberry Pi headless, mein if [[file1 -nt file 2]], das der Meinung ist, dass die beiden Dateien dasselbe Änderungsdatum haben

401
BeardyMike

Ich habe also ein Playerskript "player.sh" und ein Updater-Skript "updater.sh".

player.sh spielt alle mp3-Dateien in / home / filepath / mit einem Platzhalter * .mp3 ab. Dies funktioniert wie erwartet.

Ich möchte, dass der Updater.sh 15 Sekunden lang im Ruhezustand ist. Mounten Sie dann das USB-Laufwerk "sda1" in / media / pi. Überprüfen Sie dann, ob * .mp3 in / media / pi neuer ist als die * .mp3-Datei in Home /Dateipfad/

Wenn die Datei neuer ist, wird die MP3-Wiedergabe gestartet, RM wird verwendet, um alle * .mp3-Dateien aus / home / filepath / zu löschen, die neuere * .mp3-Datei wird in / home / filepath / kopiert, und der Player wird erneut gestartet die neue Datei abspielen.

das tut es aber nicht ....

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

Ich bekomme nur ein Terminal mit "nicht aktualisiert".

Egal, was ich mache, das Skript denkt, dass die Dateien das gleiche Änderungsdatum haben, aber ich habe die Dateien mit "stat" überprüft und die Änderungsdaten sind viele Stunden auseinander.

Irgendwelche Ideen?

Vielen Dank!

0

1 Antwort auf die Frage

1
Scott

Wenn Sie so etwas sagen [[ /dir1/* -nt /dir2/* ]], erweitert die Shell das Aussehen, so dass es aussieht

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

Wenn Sie in jedem Verzeichnis genau eine Datei haben, sollte dies prekär sein. Andernfalls ist der Befehl Unsinn und schlägt fehl.

Sie müssen -ntnur zwei Dateien gleichzeitig verwenden. Vielleicht möchten Sie etwas tun

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

Sie verwenden auch, &wo Sie verwenden sollten &&.

Danke, Scott! Ich bin noch ziemlich neu in der Codierung so, wenn Sie die Zeit haben, könnten Sie zerlegen, was in der zweiten Lösung "für b in ..." passiert. BeardyMike vor 5 Jahren 0