![Raspberry Pi 無頭,我的 if [[ file1 -nt file 2 ]] 認為這兩個檔案有相同的修改日期](https://rvso.com/image/1567389/Raspberry%20Pi%20%E7%84%A1%E9%A0%AD%EF%BC%8C%E6%88%91%E7%9A%84%20if%20%5B%5B%20file1%20-nt%20file%202%20%5D%5D%20%E8%AA%8D%E7%82%BA%E9%80%99%E5%85%A9%E5%80%8B%E6%AA%94%E6%A1%88%E6%9C%89%E7%9B%B8%E5%90%8C%E7%9A%84%E4%BF%AE%E6%94%B9%E6%97%A5%E6%9C%9F.png)
所以我有一個播放器腳本“player.sh”和一個更新程式腳本“updater.sh”。
player.sh 使用通配符 *.mp3 播放 /home/filepath/ 中的任何 mp3 文件,這按預期工作。
我想要的是 updater.sh 休眠 15 秒,然後將 USB 驅動器“sda1”掛載到 /media/pi,然後檢查 /media/pi 中的 *.mp3 是否比 home 中的 *.mp3 新/文件路徑/
如果檔案較新,它會終止 mp3 播放,使用 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/* ]]
,shell 會將其擴展為如下所示
[[ /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) …
︙
另外,您正在使用&
應該使用的地方&&
。