Ich arbeite an einer Website-Konvertierung. Bei den Dateien, die verknüpft und vom Webserver bereitgestellt wurden, wurde die Groß- und Kleinschreibung nicht berücksichtigt. Aber ich habe einen Dump der Site auf meinem Linux-System erstellt und schreibe Skripte, um Daten zu migrieren. Das Problem ist, dass zwischen Linkzeichenfolgen auf den Seiten und der tatsächlichen Groß- und Kleinschreibung im Dateisystem Probleme mit der Groß- und Kleinschreibung auftreten.
Beispielsweise kann eine Seite einen Link haben, wie es <a href='/subfolder/PageName.asp'>
die eigentliche Datei ist /subfolder/pagename.asp
. Ebenso bei Bildern - <img src='spacer_sm.gif'>
könnte sein Spacer_Sm.gif
.
Mein Gedanke ist also, alle Verzeichnisse und Dateinamen für den Site-Download in Kleinbuchstaben zu ändern. Wie mache ich das (und könnte es einen besseren Weg geben?)
Selbst wenn es Unix-Befehle gibt, bei denen zwischen Groß- und Kleinschreibung unterschieden wird, verwende ich PHP, sodass nicht alle dortigen Dateisystembefehle Optionen für die Groß- und Kleinschreibung enthalten.
quelle
Antworten:
Ich weiß nicht, ob dein Unix-Geschmack einen hat
rename
. Viele Linuxes haben und es ist Teil eines Perl-Pakets, wenn Sie nach einem Repository suchen.Oben Version mit
führt die Aktion nicht wirklich aus, sondern druckt nur das aus, was getan werden würde. Sie lassen das -n weg, um es wirklich zu tun.
quelle
'y/[A-Z]/[a-z]/'
Teil?rename
es Teil einesperl
Pakets ist, denke ich, Perl, aber das Muster wird auch insed
und vielleicht auch in verwendetAWK
. Ich weiß es nur ganzsed
gut. Ich übersetzey
nachtranslate
odermap
, aber ich weiß nicht, woher der Charakter stammt.rename
es sich um ein Perl-Skript handelt.Zsh
Erläuterungen:
zmv
Benennt Dateien um, die einem Muster entsprechen, gemäß dem angegebenen Ersatztext um.-o-i
Übergibt die-i
Option an jedenmv
Befehl unter der Haube (siehe unten). Im Ersetzungstext,$1
,$2
, usw., sind die aufeinanderfolgenden klammerten Gruppen in dem Muster.**
bedeutet alle (Unter-) * Verzeichnisse rekursiv. Das Finale(/)
ist keine Gruppe in Klammern, sondern ein Glob-Qualifikationsmerkmal, das bedeutet, dass nur Verzeichnisse übereinstimmen.${2:l}
konvertiert$2
in Kleinbuchstaben.Perl umbenennen
Hier verwende ich das Perl-Umbenennungsskript, als das Debian und Ubuntu ausgeliefert werden
/usr/bin/prename
(normalerweise auch verfügbarrename
). Mit Bash ≥4 oder zsh:Mit anderen Muscheln:
tragbar
Rekursiv:
Die Verwendung von
-depth
stellt sicher, dass tief verschachtelte Verzeichnisse vor ihren Vorfahren verarbeitet werden.quelle
Bei der folgenden Verzeichnisstruktur hat es nicht funktioniert:
Hier ist ein Beispiel, das funktioniert:
Für eine Erklärung zu
b
unde
vars:Verwenden Sie dann die folgende Tastenfolge: /,,Enterbb
quelle
Die akzeptierte Antwort funktionierte bei mir nicht, da versucht wurde, alle Verzeichnisse gleichzeitig zu ändern. Ich habe bei Stackexchange eine andere Lösung gefunden, die der tragbaren von Gilles oben sehr ähnlich ist: von Baramin -
/programming/4268591/unix-rename-files-directories-to-uppercase
Ich habe es hier kopiert:
Zu dem ich den Befehl tr in ie geändert habe: sed s / cat / dog / g
Jeder Dank geht an Baramin unter dem obigen Link
quelle