Ich versuche, Dateien (einschließlich versteckter Dateien) in Ubuntu Xenial alphabetisch in natürlicher Reihenfolge zu sortieren.
Ich bin zu folgendem Ergebnis gekommen:
ls -l1va
Welche Drucke:
.
..
.ICEauthority
.Private
.Xauthority
.atom
.babel.json
.bashrc
.bash_history
.bash_logout
.cache
.cargo
.config
.dbeaver4
.dbeaver-drivers
.dbus
.docker
.eclipse
.ecryptfs
.electron
.fltk
.gconf
.gem
.gimp-2.8
.gitconfig
.gksu.lock
.gnome
.gnome2
.gnome2_private
.gnupg
.local
.mozilla
.nano
.node-gyp
.npm
.nvm
.pki
.profile
.putty
.recently-used
.selected_editor
.ssh
.sudo_as_admin_successful
.thumbnails
.v8flags.6.2.414.32-node.8.4654dce123559e380233361202560f0e.json
.vmware
.vscode
.vscode-insiders
.wget-hsts
.xsession-errors
.xsession-errors.old
.yarn
.yarnrc
Desktop
Documents
Downloads
Music
Pictures
Projects
Public
Templates
Videos
bin
mnt
tmp
Wie kann ich erreichen, dass die Groß-/Kleinschreibung beim Sortieren ignoriert wird und nach Buchstaben statt nach der Position in der ASCII-Tabelle sortiert wird (was vermutlich der Grund dafür ist, dass Z vor a steht)?
Antwort1
Die Sortierreihenfolge hängt vom Gebietsschema ab. Das Standardgebietsschema C
sortiert wie in Ihrem Beispiel:
$ LC_COLLATE=C ls -A
.hidden Zappa aardvark vent water zebra
Viele andere hingegen geben den Buchstaben den Vorrang und ignorieren die Groß-/Kleinschreibung und die führenden Punkte:
$ LC_COLLATE=en_US.UTF-8 ls -A
aardvark .hidden vent water Zappa zebra
(Es würde mich nicht überraschen, wenn einige Lokalisten auch Charaktere wiegegenUndmals gleichwertig, aber mir fällt keins ein, das das tut.)
Natürlich müssen diese Gebietsschemas auf dem System vorhanden sein. locale -a
sollte die Gebietsschemas anzeigen, die derzeit auf dem System verwendbar sind, und Sie können sie verwenden, locale-gen $localename
um die fehlenden zu generieren. Dann wird dpkg-reconfigure locales
eine Liste angezeigt, in der Sie auswählen können, welche Gebietsschemas generiert werden sollen.
Antwort2
Durch Festlegen $LC_COLLATE
eines entsprechenden Werts werden die Namen entsprechend sortiert.
LC_COLLATE=en_US ls -l1va
Darüber hinaus kann es im Startskript der Shell festgelegt werden, damit es jedes Mal wirksam wird.
export LC_COLLATE=en_US
Antwort3
Ab Ubuntu 19.10 LC_COLLATE=C
scheint die Einstellung nicht auszureichen, aber sie LC_ALL=C
scheint zu funktionieren (so dass ls
die ASCII-Reihenfolge für Datei- und Verzeichnisnamen verwendet wird).
Antwort4
Die Antwort war nicht leicht zu finden, aber sie war hier auf Stack Exchange.
Der "Fix" beinhaltet das Bearbeiten von /usr/share/i18n/locales/iso14651_t1_common und das Ändern der Zeile
<U002E> IGNORE;IGNORE;IGNORE;<U002E> # 47 .
hinein:
<U002E> <RES-1>;IGNORE;IGNORE;<U002E> # 47 .