bash-Fehler beim umbenennen der Dateien mit Leerzeichen - mv Ziel ist kein Verzeichnis
Ich versuche das umbenennen einer Reihe von Dateien, die Leerzeichen in Ihnen, loszuwerden, die Leerzeichen. Ich dachte, ich fand die richtigen bash Befehl:
for f in *.txt; do mv \"$f\" ${f/ /}; done
Jedoch, diese gibt die Fehlermeldung "mv: Ziel ist kein Verzeichnis" für jede Datei. Wenn ich ersetzen 'mv' mit 'echo mv" in den Befehl, es gibt den richtigen mv-Befehl für jede Datei, und wenn ich geben alle diese mv-Befehle einzeln funktionieren Sie. Zum Beispiel, wenn ich 2 Dateien "ein .txt", und "b".txt", und führen Sie den Befehl oben bekomme ich:
mv: target 'a.txt' is not a directory
mv: target 'b.txt' is not a directory
Wenn ich den Befehl:
for f in *.txt; do echo mv \"$f\" ${f/ /}; done
Bekomme ich:
mv "a .txt" a.txt
mv "b .txt" b.txt
Ich habe einen anderen Weg gefunden, um dies zu tun, verwenden Sie "umbenennen", aber ich würde gerne wissen, warum das nicht funktioniert.
- Ich Frage mich, wie du das Leerzeichen vor dem .txt, weil Sie nicht akzeptieren. Es wird denke .txt ist kein Verzeichnis
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen:
Drei Punkte:
Die Anführungszeichen, um eine shell-variable sollte nicht entgangen sein.
Im Allgemeinen ist es eine gute Idee, setzen Sie doppelte Anführungszeichen um jeden Verweis auf eine shell-variable.
${f//}
entfernt nur das erste vorkommen eines Raumes. Entfernen Sie alle Leerzeichen, verwenden Sie${f///}
., Was falsch gelaufen
Den Ausdruck
\"$f\"
verhält sich nicht wie es ist in doppelte Anführungszeichen gesetzt. Es wird erweitert, um zwei Argumente, wie"a
und.txt"
, wo die double-quotes behandelt werden als normale Zeichen, ebenso wie diea
ist ein normaler Charakter. Da gibt es drei Argumente, ummv
("a
und.txt"
unda.txt
),mv
glaubt, dass Sie versuchen, verschieben Sie die ersten beiden Argumente der Dritte und der Dritte ist erforderlich, um ein Verzeichnis sein. Seit der Dritten ist kein Verzeichnis, gibt es eine Fehlermeldung.convert $fullfilename -resize ${new_width_height[0]}x${new_width_height[1]} $new_file_name
Wenn die Dateinamen Leerzeichen enthalten, müssen Sie in Anführungszeichen.Weil das ist das erste, was kam, bis auf google, wenn man beim googeln nach diesem Fehler, ich dachte, ich würde hinzufügen, ein bisschen.
Dieser Fehler tritt auf, wenn Sie mehr als zwei Argumente und das Letzte Ergebnis ist kein Verzeichnis.
Dies funktioniert:
Nicht:
In meinem Fall war ich dabei:
mv prefix_* output_file_name
zu gewährleisten, eine heruntergeladene Datei war eine konsequente Namen, aber eine andere Datei, erschienen in das Verzeichnis, restulting in der "mv-Ziel ist kein Verzeichnis" Fehler