
Ich versuche, einige hundert Dateien basierend auf einer anderen Datei im selben Verzeichnis umzubenennen. Ich habe ein Skript gefunden und mit den Änderungen habe ich Folgendes:
while read file; do echo mv "\"${file%/*}/Trailer.mov\"" "\"${file%.*}-Trailer.mov\""; done < <(find . -type f ! -name "Trailer.mov" -name "*.mkv")
Es gibt MV-Befehle wie folgt aus:
mv "./dir1/Trailer.mov" "./dir1/filename-Trailer.mov"
Die mv-Befehle benennen die Dateien korrekt um (sofern sie vorhanden sind), wenn ich sie manuell ausführe. Wenn ich das Skript ohne Echo ausführe, werden Fehler wie die folgenden ausgegeben:
mv: cannot stat ‘"./dir1/Trailer.mov"’: No such file or directory
Dieser Fehler tritt bei jedem einzelnen Element auf, unabhängig von der Existenz der Dateien. Warum passiert das? Ich verwende es als Root.
Antwort1
Sie müssen entweder die inneren Anführungszeichen entfernen oder verwenden eval
.
Das Problem besteht darin, dass die "
s nun als Teil des Dateinamens betrachtet werden, d. h. es wird versucht, auf den falschen Dateinamen (der nicht existiert) zuzugreifen.