Raspberry Pi ヘッドレス、if [[ file1 -nt file 2 ]] は 2 つのファイルの変更日が同じであると認識します

Raspberry Pi ヘッドレス、if [[ file1 -nt file 2 ]] は 2 つのファイルの変更日が同じであると認識します

つまり、プレーヤー スクリプト「player.sh」とアップデータ スクリプト「updater.sh」があります。

player.sh はワイルドカード *.mp3 を使用して /home/filepath/ 内の任意の mp3 ファイルを再生します。これは期待どおりに動作します。

私がしたいのは、updater.sh を 15 秒間スリープさせ、USB ドライブ「sda1」を /media/pi にマウントし、/media/pi の *.mp3 が home/filepath/ の *.mp3 より新しいかどうかを確認することです。

ファイルの方が新しい場合は、mp3 の再生を pkill し、RM を使用して /home/filepath/ からすべての *.mp3 を削除し、新しい *.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 … ]]

各ディレクトリにファイルが1つだけある場合、これはすべき不安定に動作します。そうでない場合、コマンドは無意味となり、失敗します。

-nt一度に2つのファイルだけに使用する必要があります。次のようにするといいでしょう。

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

また、&を使用すべき場所でを使用しています&&

関連情報