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가 집에 있는 *.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 … ]]

각 디렉토리에 정확히 하나의 파일이 있는 경우~해야 한다불안정하게 일하세요. 그렇지 않으면 명령이 말도 안 되고 실패하게 됩니다.

-nt한 번에 두 개의 파일에만 사용해야 합니다 . 다음과 같은 작업을 수행하고 싶을 수도 있습니다.

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

또한 &.&&

관련 정보