Bash find-显示文件,但不返回此类文件或目录

时间:2017-03-19 02:11:07

标签: linux bash raspberry-pi

我有一个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.

3 个答案:

答案 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