Antworten:
Ein einfacher 1-Liner sollte reichen (unter der Annahme von Posix sh
-kompatible Shell):
for f in *:*; do mv -v "$f" $(echo "$f" | tr ':' '-'); done
Erläuterung:
for ... in ...; do ...; done
ist ein Schleife
*:*
Streichhölzer alle dateien und verzeichnisse im aktuellen verzeichnis die haben :
in ihrem Namen
f
wird wiederum jedem solchen Dateinamen in der Schleife zugewiesen
mv
benennt sein erstes Argument in das zweite um; -v
(ausführlich) fordert es auf, seine Aufgaben zu drucken; Diese Option ist GNU-Utils spezifisch, daher ist es unter Linux verfügbar, jedoch nicht unter Solaris
$(...)
Führt den Code in einer Sub-Shell aus und ersetzt die Ausgabe
echo
Gibt das Argument in der Standardausgabe aus
tr
Liest die Standardausgabe und übersetzt die Zeichen entsprechend der mitgelieferten Karte
Wenn Sie verwenden Bash ,
Sie können vermeiden, eine zusätzliche Schale zu laichen ( $()
) mit Teilprozessen ( tr
)
Durch Ersetzen $(...)
mit ${f//:/-}
.
$(echo "$f" | tr ':' '-')
mit "${f//:/-}"
und vermeiden Sie den Aufruf von Subshell, Pipe und externem Programm. Ich denke, das ist ein Bashismus, aber eh. Siehe hier .
Wie in einem anderen Beitrag von mir angegeben rename
Werkzeug könnte den Trick für Sie tun. Sie müssen nur tippen rename s/:/-/ <files to rename>
Dies ersetzt jeden Doppelpunkt durch einen Bindestrich in allen Dateien, die Sie am Ende benennen, d.h. e. 2013-10-*
Hier ist der link zu meinem anderen post
Ich bin mir sicher, dass ein UNIX-Profi dies mit Bash tun könnte, aber hier ist meine schnelle und schmutzige Version mit Ruby.
path_to_files = "/home/username/wrongnames/"
filenames = `ls #{path_to_files}`.split
filenames.each do |fn|
`mv #{path_to_files + fn} #{path_to_files + fn.gsub(/:/, "-")}`
end
Setzen Sie path_to_files auf den Pfad zu Ihren falsch benannten Dateien. Speichern Sie den obigen Code in einer Datei namens rename.rb dann:
username@machinename$ ruby rename.rb
mit Umbenenner :
$ renamer --find ":" --replace "-" *
rename
ist ein Tool, das auf vielen Linux-Distributionen vorinstalliert ist. Aber ich denke, für Windows kann dieses Tool großartig sein.
Dies mag übertrieben sein, aber Sie können alle Sonderzeichen mit dem Skript unter dem in dieser Antwort angegebenen Link umbenennen:
for f in
... loop ist eine Schleife, die über alle Dateien im aktuellen Verzeichnis iteriert, in denen die Dateien übereinstimmen müssen*:*
. (Was passiert mit dirs, die übereinstimmen?). Der Befehl move ist ein move oldname newname, bei dem der neue Name durch Ausführen einer Shell mit generiert wird$( subshell here )
. Was tr macht, ...