Ich habe einen Ordner namens Tutorials . Darin befinden sich ungefähr 15 Ordner, die jeweils ungefähr 15-20 .mp4
Videodateien enthalten. Ich möchte die Gesamtdauer aller im Ordner vorhandenen Dateien abrufen tutorials
. Dies ist der Code, den ich bisher geschrieben habe:
for d in ~/Videos/tutorials/*; do
if [ -d "$d" ]; then
exiftool -n -q -p '${Duration;our $sum;$_=ConvertDuration($sum+=$_)}' ./*.mp4| tail -n1
fi
done
Der obige Code gibt bei Ausführung einen Fehler File not found: ./*.mp4
für jeden der in den Tutorials vorhandenen Unterordner aus . Allerdings, wenn die Linie
exiftool -n -q -p '${Duration;our $sum;$_=ConvertDuration($sum+=$_)}' ./*.mp4| tail -n1
Wird in jedem Unterordner einzeln ausgeführt, kann ich die richtige Ausgabe erhalten.
Welche Änderungen sollte ich am obigen Code vornehmen, damit er funktioniert?
quelle
Sie sollten ersetzen
./*.mp4
durch"$d"/*.mp4
:Ihre for-Schleife sucht nach Verzeichnissen in ~ / Videos / tutorials / und weist dem Wert der
d
Variablen ihren Pfad zu . Dies ist das Verzeichnis, in dem Sie mit exiftool nach mp4-Dateien suchen möchten, während Sie exiftool anweisen, das aktuelle Verzeichnis mit zu verwenden./
.Ein anderer Ansatz wäre,
cd
jedes Mal auf das Verzeichnis zuzugreifen, sodass Ihr Code wie folgt lautet:Der folgende Ansatz kann verwendet werden, wenn Sie problematische Dateinamen für einige der mp4-Dateien haben, z. B. Leerzeichen. Es speichert die Dateinamen in einem Array und erweitert sie im
exiftool
Befehl.quelle