2016-05-03 10 views
2

私は音楽ディレクトリをdebianコンピュータに持っています。最終的にこれらのファイルを削除する手伝いをするために、私はmediainfoをインストールし、そのコマンドを使って音楽ディレクトリにあるすべてのファイルを処理するスクリプトを作成しました。Bash:mediainfoのあるディレクトリ内のすべてのファイルを調べることができません

私は、削除する必要があるかどうかを定義するためにdurationパラメータを利用しようとしています。入力例は、

mediainfo --Inform="General;%Duration%" /home/administrator/music/Example\ Full\ OST.mp4 
7838987 

出力はミリ秒単位で戻ります。ファイルにスペースがあれば、mediainfoはその前にバックスラッシュを付けます。

#!/bin/bash 
for i in /home/administrator/music/* 
do 
# Changing i to readable form for mediainfo 
i=$(echo $i | sed -r 's/[ ^]+/\\&/g') 
echo $i 
# Go Through files, storing the output to mediadur variable 
mediadur=$(mediainfo --Inform="General;%Duration%" $i); 
echo $mediadur; 
done 

エコー出力は以下のとおりです:私は私のスクリプトでアカウントにこれを撮影した

/home/administrator/music/Example\ Full\ OST.mp4 
  

mediadurエコー出力は何も表示されません。しかし、最初のエコー出力を最初の例にコピーすると、同じ出力が表示されます。

ただし、ディレクトリにファイル名にスペースがないメディアがある場合は、スクリプトは正常に動作します。スクリプトの出力:

/home/administrator/music/546721638279.mp3 
83017 

この問題は非常に困惑しています。どんな助けもありがとうございます。

答えて

2

あなたは、この行を更新する必要があります

mediadur=$(mediainfo --Inform="General;%Duration%" "$i"); 

二重引用符はglobbing and word splitting

1

を防ぐことができます実はこれは、コマンドラインに間違ったファイル名を指定するだけのことを、MediaInfoをとは関係ありません。そして、MediaInfoは "彼らの前にバックスラッシュ"を追加しません。

あなたのエスケープ方法は期待どおりに機能しません。

#!/bin/bash 
for i in music/* 
do 
    # Go Through files, storing the output to mediadur variable 
    mediadur=$(mediainfo --Inform="General;%Duration%" "$i"); 
    echo $mediadur; 
done 

空白を含むファイル名にもうまく機能します。

関連する問題