Wie kann ich den ls
Befehl in Max OS X Lion dazu bringen, Dateien und Verzeichnisse ähnlich wie in Ubuntu Linux zu sortieren (ohne Berücksichtigung der Groß- und Kleinschreibung, Verzeichnisse NICHT im Vordergrund, Punktdateien NICHT im Vordergrund)? Idealerweise möchte ich dies tun, ohne die Ausgabe an einen anderen Befehl wie sort weiterzuleiten.
Zum Beispiel möchte ich sehen:
foo
Foobar
MyStuff/
.stuff/
test.txt
anstatt:
.stuff
Foobar
MyStuff/
foo
test.txt
Unter Linux wird die ls
Sortierreihenfolge speziell vom Gebietsschema des Systems gesteuert LC_COLLATE
. Wann LC_COLLATE=en_US.UTF-8
sortiere ich nach Belieben? Wenn LC_COLLATE=C
, ls
wird auf OS X. ähnlich sortieren
LC_COLLATE
ist auf en_US.UTF-8
OS X eingestellt, ls
sortiert aber immer noch die alte POSIX
Art und Weise. Weiß jemand, wie ich dieses Verhalten Linux ähnlicher machen kann?
Antworten:
Möglicherweise ist Folgendes nicht möglich:
Quelle: http://ask.metafilter.com/130292/CaseInsensitive-LS-on-Mac-OS-X
URSPRÜNGLICHE ANTWORT
Dieser Befehl sortiert keine Punktdateien, zeigt jedoch zusätzliche Verzeichnislisten an
Ich bin dem nahe gekommen:
quelle
Ich weiß, dass dies beantwortet wurde, aber dies funktioniert am besten für mich:
Es listet alle Details auf und sortiert sie, indem Groß- und Kleinschreibung ignoriert wird.
quelle
Das nervt mich jetzt schon eine Weile und ich habe es endlich geklärt (heh). Nachdem Sie eine Reihe von Vorschlägen ausprobiert haben, die nicht funktionierten, haben Sie Folgendes getan.
Wenn Sie bereit sind, MacPorts (oder Homebrew oder Fink) zu installieren, macht die GNU-Version von ls genau das, was Sie wollen. Ich selbst benutze MacPorts, daher erkläre ich diesen Ansatz:
Laden Sie MacPorts herunter und installieren Sie es:
http://www.macports.org
Installieren Sie das GNU Coreutils-Paket:
sudo port install coreutils
Sie sollten jetzt GNU ls haben:
gls
. Versuchen Sie es in einem Verzeichnis, das Elemente enthält, die mit Groß- und Kleinbuchstaben beginnen:gls -U
(Die
-U
Option bedeutet eigentlich "unsortiert", aber unter OS X bewirkt dies, dass die Groß- und Kleinschreibung nicht berücksichtigt wird.)Fügen Sie diesen Alias in Ihrem
.bash_profile
so der regulärenls
funktioniert so , wie Sie es haben wollen (ich wie die Farbausgabe, aber Sie können das weglassen , wenn Sie möchten, brauchen Sie nur die-U
):alias ls='gls -U --color'
Beachten Sie, dass die
-U
Option auf anderen Plattformen wahrscheinlich nicht funktioniert. In OS X scheint es immer das Richtige zu tun (vielleicht, weil HFS + praktisch unabhängig von Groß- und Kleinschreibung ist - "case-aware", technisch gesehen), aber wenn Sie es auf einer Linux-Box versuchen, werden die Ergebnisse höchstwahrscheinlich einfach nicht sein überhaupt sortiert.quelle
In Ergänzung zu dem, was Mike oben geschrieben hat, habe ich noch einen Schritt weiter gegangen und einen Weg gefunden, um Ihre eigenen Kollatierungsregeln zu definieren.
Die Gebietsschemadefinitionen befinden sich in / usr / share / locale /. Jeder Ordner ist ein Gebietsschema und hat eine Datei (oder einen Link) LC_COLLATE, die definiert, welche Symbole "gleich" sind (zum Beispiel, dass U, u und ü bei der Bestellung gleich sind). Sie können ein Verzeichnis duplizieren. Dadurch wird eine neue Gebietsschemadefinition erstellt:
Jetzt haben Sie ein neues Gebietsschema mit dem Namen 'en_GB.UTF-8-CI' ('CI' für case-insensitive) und können dort LC_COLLATE verwenden.
Um LC_COLLATE in der neuen Ländereinstellung zu ändern, können Sie die Ländereinstellungsquellen von http://www.opensource.apple.com/source/adv_cmds/adv_cmds-119/usr-share-locale.tproj/colldef/ herunterladen und bearbeiten Das kommt dem, was Sie wollen und wollen, am nächsten
und jetzt, wenn du rennst
Sie müssen nach Ihren Regeln sortieren .
Ja, das ist es, was es braucht, um die Groß- und Kleinschreibung von 'ls' zu ignorieren.
quelle
Als Workaround können Sie eine Funktion und einen Alias verwenden:
Dies erzeugt eine fallunabhängig sortierte Ausgabe für den Standard-Befehl ls.
quelle
Verwenden
funktioniert bei mir.
-f Schaltet offiziell jede Sortierung aus, aber es sieht so aus, als ob die ursprüngliche HFS-Sortierung durchscheint, bei der die Groß- und Kleinschreibung nicht beachtet wird.
Es hängt davon ab, ob bei Ihrem HD-Format zwischen Groß- und Kleinschreibung unterschieden wird oder nicht. Da jedoch bei Mac OS X-Systemfestplatten das HFS-Format zwischen Groß- und Kleinschreibung als Standardformat festgelegt ist, sollte dies für die meisten Benutzer funktionieren.
quelle
Inspiriert von Mikes Antwort, fügte ich Folgendes zu / etc / bashrc hinzu und es funktioniert wunderbar in Mojave. Es listet versteckte Dateien am Ende auf, wenn -a hinzugefügt wird, aber das stört mich nicht.
Sie können die neue Konfiguration anzeigen, indem Sie den Befehl locale ausführen. Entfernen Sie zum Zurücksetzen einfach die Zeile aus / etc / bashrc und melden Sie sich wieder beim Terminal an.
Beachten Sie, dass weder ls -f1 noch ls -f in Mojave für mich gearbeitet haben. Am Ende hatte ich eine wirklich unsortierte Liste. Nur die Lösung, die ich bereitgestellt habe, hat in Mojave funktioniert.
quelle
.bashrc
.zshrc
alias ls="LC_COLLATE=cs_CZ.ISO8859-2 ls"
Lauf:
Sie werden wahrscheinlich feststellen, dass Ihr
ls
Befehl ein Alias ist.quelle
ls is /bin/ls
. Unter OS X:ls is hashed (/bin/ls)
. So oder so, auch wenn ich/bin/ls
direkt anrufe, wird immer noch nicht nach LC_COLLATE sortiert.ls
Befehl so ausgerichtet war, dass er einbezogen wurde--group-directories-first
. Es kann immer noch irgendwo anders gemacht werden, nur nicht als Alias.Wenn Sie hauptsächlich mit der Sortierreihenfolge der Punktedateien befasst sind , können Sie nach Erweiterung sortieren : Verwenden Sie den
ls
Befehl aus dem GNU Fileutils mit der Option--sort=extension
. (Sie können die GNU Fileutils zB über Macports installieren.)quelle
Es wird nach LC_COLLATE sortiert. Die meisten LC_COLLATE-Dateien sind nur so eingestellt, dass die Groß- und Kleinschreibung beachtet wird. http://collation-charts.org/fbsd54/
Es gibt zwei Sortierungen, bei denen zwischen Groß- und Kleinschreibung nicht unterschieden wird: cs_CZ.ISO8859-2 und et_EE.ISO8859-15 et_EE.ISO8859.15 sortiert "Z" nicht so, wie es die englischsprachigen Benutzer wünschen. cs.CZ.ISO8859-15 macht einen guten Job mit dem Alphabet, ich wünschte nur, es würde "~" vor alphabetischen Zeichen sortieren.
Meine Lösung lautet: LC_COLLATE = cs_CZ.ISO8859-2 / bin / ls -FG
Ich frage mich, ob eine benutzerdefinierte LC_COLLATE-Datei "." wie du willst und "~" wie ich will.
quelle