2016-05-03 13 views
2

Ich habe ein Musikverzeichnis auf einem Debian-Computer, das von Zeit zu Zeit zu große Dateien darin bekommt. Um mir beim eventuellen Löschen dieser Dateien zu helfen, habe ich mediainfo installiert und ein Skript erstellt, das mit diesem Befehl alle Dateien im Musikverzeichnis durchlaufen soll.Bash: Fehler beim Durchlaufen aller Dateien in einem Verzeichnis mit mediainfo

Ich versuche, den Dauerparameter zu verwenden, um zu definieren, was gelöscht werden muss oder nicht. Die Beispieleingabe lautet:

Ausgabe gibt die Dauer als Millisekunden zurück. Bitte beachten Sie, dass mediainfo, wenn Dateien Leerzeichen enthalten, einen Backslash vor ihnen markiert.

#!/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 

Ausgänge sind Echo: Ich habe diese Rechnung in meinem Skript genommen

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

Die mediadur Echo Ausgang nichts angezeigt. Aber wenn ich die erste Echoausgabe in das erste Beispiel kopiere, wird dieselbe Ausgabe angezeigt.

Wenn das Verzeichnis jedoch über Medien verfügt, die im Dateinamen keinen Platz haben, funktioniert das Skript einwandfrei. Die Ausgabe des Skripts:

/home/administrator/music/546721638279.mp3 
83017 

Dieses Problem hat mich sehr verwirrt. Jede Hilfe wird geschätzt.

Antwort

1

verhindern Eigentlich ist dies nicht im Zusammenhang Mediainfo, nur, dass Sie einen falschen Dateinamen in der Befehlszeile zur Verfügung stellen. Und MediaInfo fügt keinen "Backslash vor ihnen" hinzu.

Ihre Escape-Methode funktioniert nicht wie erwartet.

#!/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 

Funktioniert auch gut mit Dateinamen mit Leerzeichen.