Raspberry Pi 无头,我的 if [[ file1 -nt file 2 ]] 认为两个文件具有相同的修改日期

Raspberry Pi 无头,我的 if [[ file1 -nt file 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 播放,使用 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) …

此外,您正在使用&应该使用的地方&&

相关内容