2017-03-19 11 views
0

私は働くことができないbashスクリプトを持っています。私は死んだセットの初心者ですが、これは実際に私が使った最初のスクリプトです。私はomxplayerにディレクトリ内のファイルのリストを再生させようとしています。スクリプトが実行されると、私はそのファイルを表示し、そのようなファイルやディレクトリがないというエラーを返します。私を助けてください?Bashはファイルを表示していますが、そのようなファイルやディレクトリは返しません。

#!/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. 
+1

' find'も任意のプログラムでもないだろう現在のシェル。 – chepner

+1

'find/path/-name" * .mp3 "-exec omxplayer {} \;'?あるいは、f in/path/* mp3の場合でも。 omxplayer "$ f"を実行します。済んだ? – ghoti

答えて

-1

-exec foo一部が見つかった各パスのコマンドを実行しますfoo意味。 -exec PATH={}の場合、{}の部分がパス名に置き換えられ、-exec PATH=/media/pi/88DC-E668/MP3/Dance.mp3のようになります。したがって、findは実行するプログラムが実際にはないため失敗します。PATH=/media/pi/88DC-E668/MP3/Dance.mp3既に別のコメントで説明したように

xargsは、あなたが何をしようとして行うには通常の方法です。 あなたはまた、行うことができます:

find /media/pi/88DC-E668/MP3/ -name \*.mp3 | 
while read f; do 
    omxplayer "$f" 
done 
+2

このソリューションは[parsing ls](http://mywiki.wooledge.org/ParsingLs)に類似しています。 'find'からファイル名をパイプする場合は、' -print0'と 'xargs -0'を使います。このようにしないでください。 – ghoti

0

EDIT私は修正立って、しかし、あなたはまた、他人の過ちから学ぶことができるような答えは削除されません。コメントを参照して、むしろthis answerを使用してください:

これは典型的な「ハッピーパス」ソリューションであるため、このようにはしないでください。あなたが行っていることを知っていて、 (例えば、空白が含まれていないこと)。私は、多くの人々が経路のスペースが悪いことをまだ知らないことを忘れています。

ちょうどあなたがこのようなプレーヤーに見つけたものを渡すためにxargsを使用します。

#!/bin/sh 
find /media/pi/88DC-E668/MP3/ -name "*.mp3" | xargs omxplayer 
+2

空白または改行がこれを壊します。 waxratの答えと同様、この解決策は[parsing ls](http://mywiki.wooledge.org/ParsingLs)に似ています。 'find'のファイル名をパイプする場合は' -print0'を 'xargs -0'と一緒に使います。このようにしないでください。 – ghoti

1

簡単な方法:omxplayer場合

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を省略することができます複数のファイル名を扱うことができます。このような場合、第一には、のように書くことができます

find /media/pi/88DC-E668/MP3 -name \*.mp3 -exec omxplayer {} + 

が、最も簡単なのは、おそらくそれは `-exec`がで使用する変数を設定することができます経由で実行されます

#shopt -s globstar #the default is on 
for mp3 in /media/pi/88DC-E668/MP3/{,**/}*.mp3 
do 
    omxplayer "$mp3" 
done 
関連する問題