Wie kann ich die Datei- / Verzeichnisnamen in einem Verzeichnis rekursiv auflisten, die gleich sind, jedoch unterschiedliche Groß- / Kleinschreibung / Groß- / Kleinschreibung haben? Ex.:
INPUT (nicht der ls
Befehl, die Verzeichnisse):
[user@localhost ~/a] ls -R
.:
b
./b:
ize Ize
./b/ize:
./b/Ize:
[user@localhost ~/a]
AUSGABE:
/b/ize
Antworten:
Wenn Sie über GNU verfügen
uniq
, können Sie Groß- und Kleinschreibung nicht berücksichtigen (-i
) und-d
nur doppelte Zeilen drucken:Wie @StephaneChazelas in seiner Antwort erwähnt hat , entspricht dies möglicherweise nicht Ihren Erwartungen, wenn Sie doppelte Pfade haben können, die sich nur in Groß-
a/b/foo
und Kleinschreibung unterscheiden (wie undA/b/foo
).quelle
sort -f
hier. Beachten Sie auch, dass GNUuniq
die gleiche Einschränkung wie GNU hat,tr
da es nicht für den Abgleich von Mehrbyte-Zeichen funktioniert.sort -f
? Wennuniq
ich mich mit dem Fall befassen kann, warum sollte ich dann auch diesort
Groß- und Kleinschreibung nicht berücksichtigen müssen ? Und was meinst du mit Multi-Byte-Zeichen? Solche Dinge\n
,\r
etc? Wie können sie verschiedene Fälle haben?export LC_ALL=C; printf '%s\n' a A b B | sort | uniq -di
. Einige Gebietsschemas sortieren ohne Berücksichtigung der Groß- und Kleinschreibung, andere (wie C) nicht.uniq
benötigt eine sortierte Eingabe, die doppelten Zeilen müssen benachbart sein.Angenommen, Dateinamen enthalten keine Zeilenumbrüche, können Sie Folgendes tun:
Beachten Sie, dass einige
tr
Implementierungen wie GNUtr
den Fall von Mehrbytezeichen nicht ändern.Beachten Sie auch, dass der gemeldete Pfad möglicherweise nicht der Pfad einer Datei ist. Wenn zum Beispiel eine
./a/b/fOo
und eine./A/b/fOo
Datei vorhanden sind, wird diese gemeldet./a/b/foo
. Wenn es nicht das ist, was Sie wollen, können Sie Ihre Anforderungen verfeinern.quelle
Alle diese Ideen sind schlecht. Verwenden Sie Prüfsummen und stellen Sie sicher, dass die Dateien identisch sind. Dann wird die Aufgabe einfach.
Dies wird jede Datei im Verzeichnis und alle Unterverzeichnisse zusammenfassen und alle Dupes dieser Datei ausgeben, falls vorhanden. Ich habe die Pipeline zur besseren Lesbarkeit mehrzeilig gemacht.
quelle