我有一个bash脚本,我无法工作。我是bash的初学者,这实际上是我用过的第一个剧本。我试图让omxplayer播放目录中的文件列表。当脚本运行时,我得到反馈显示文件,然后是没有这样的文件或目录的错误。请帮帮我?
#!/bin/sh
find /media/pi/88DC-E668/MP3/ -name "*.mp3" -exec PLAY={} \;; omxplayer "$PLAY";
这是回声:
find: `PLAY=/media/pi/88DC-E668/MP3/Dance.mp3': No such file or directory
find: `PLAY=/media/pi/88DC-E668/MP3/Whitemary.mp3': No such file or directory
find: `PLAY=/media/pi/88DC-E668/MP3/Limo.mp3': No such file or directory
find: `PLAY=/media/pi/88DC-E668/MP3/Silo.mp3': No such file or directory
File "" not found.
答案 0 :(得分:1)
简单方法:
find /media/pi/88DC-E668/MP3 -name \*.mp3 -exec omxplayer {} \;
或
while IFS= read -r -d '' mp3
do
omxplayer "$mp3"
done < <(find /media/pi/88DC-E668/MP3 -name \*.mp3 -print0)
或
find /media/pi/88DC-E668/MP3 -name \*.mp3 -print0 | xargs -0 -n1 omxplayer
如果-n1
可以处理多个文件名,则可以省略omxplayer
。在这种情况下,第一个可以写成:
find /media/pi/88DC-E668/MP3 -name \*.mp3 -exec omxplayer {} +
但最简单的可能是
#shopt -s globstar #the default is on
for mp3 in /media/pi/88DC-E668/MP3/{,**/}*.mp3
do
omxplayer "$mp3"
done
答案 1 :(得分:0)
编辑我已经纠正,但不会删除答案,因为您也可以从其他人的错误中吸取教训。请参阅评论,而不是使用this answer:)
所以请不要这样做,因为这是一个典型的“快乐路径”解决方案 - 意思是:如果您知道自己在做什么并且知道自己的路径(例如它们不包含空格),它就会起作用)。我一直忘记许多人还不知道道路上的空间是邪恶的。
只需使用xargs将您找到的内容传递给您的播放器:
#!/bin/sh
find /media/pi/88DC-E668/MP3/ -name "*.mp3" | xargs omxplayer
答案 2 :(得分:-1)
-exec foo
部分表示为找到的每个路径运行命令foo
。
在您的情况下,-exec PATH={}
,{}
部分将替换为路径名称,最后会显示-exec PATH=/media/pi/88DC-E668/MP3/Dance.mp3
,因此find
会尝试运行命令{{ 1}}失败,因为实际上没有任何这样的程序要执行。
PATH=/media/pi/88DC-E668/MP3/Dance.mp3
是执行您正在尝试执行的操作的常用方法,如已在另一条评论中所述。
你也可以这样做:
xargs