2016-05-26 11 views
0

Ich habe Probleme bei der Manipulation von Strings in bash. Ich möchte Erweiterungen neu schreiben.Manipulieren Strings (Dateierweiterungen) in bash mit Suche

Ich habe die folgenden zwei Dateien in einem Verzeichnis Downloads

  • Beispiel 001.mkv
  • Beispiel 002.mkv

dem Skript unten habe ich immer die gleichen Dateinamen erhalten zurückgegeben ohne. mkv in .mp4 umgeschrieben.

find /Downloads -name \*.mkv -execdir echo $(file={}; echo ${file/mkv/mp4};) \; 

ich das verstehe, ist nicht alles, was Sie eine Datei neu formatieren müssen, aber dieses Skript ist Teil eines größeren Skript, das zu FFMPEG geben wird.

Hier ist der vollständige Befehl mit FFMPEG.

find /Downloads -name \*.mkv -execdir ffmpeg -i {} -vcodec copy -acodec copy $(file={}; echo ${file/mkv/mp4};) \; 
+0

Ich habe viele der Beispiele aus diesem Post versucht, aber immer noch kein Glück. Ich habe den vollständigen Befehl hinzugefügt, den ich verwende. –

+0

Sie können versuchen, bash -c nach dem Befehl -execdir verwenden, überprüfen Sie meine Antwort unten für ein Beispiel. – dood

Antwort

0

Sie können versuchen, bash -c mit Ihrem Befehl auszuführen

find /Downloads -name \*.mkv -execdir bash -c 'file={}; echo ${file/.mkv/.mp4}' \; 
0

Die exec und execdir im Allgemeinen dazu bestimmt sind, tatsächlich Befehl auszuführen nicht/print Informationen über die Dateien gefunden Echo (Druck/printf).

Es gibt mehrere Möglichkeiten, dies zu tun und hier ist eine.

Sie könnten zuerst versuchen, den Befehl rename zu verwenden, der die Umbenennung regex zum Umbenennen von Dateien verwenden kann. Dies würde erfordern, werden alle Dateien umbenannt werden in den gleichen Ordner/Downloads sein: (Syntax kann sehr nach der Umsetzung der Umbenennungs, die Schiffe mit Ihrer Distribution)

ls *.mkv 
a.mkv b.mkv 
rename .mkv .mp4 *.mkv 
ls *.mp4 
a.mp4 
b.mp4 

des Nehmen wir an, dass die MKV-Dateien sind ebenfalls vorhanden in Unterverzeichnissen von/Downloads:

find . -type f -name "*.mkv" 
./sundir/d.mkv 
./sundir/c.mkv 
./a.mkv 
./b.mkv 
find -type f -name "*.mkv" -exec rename .mkv .mp4 {} \; 
find . -type f -name "*.mp4" 
./sundir/c.mp4 
./sundir/d.mp4 
./b.mp4 
./a.mp4