Jak mogę sprawić, by ls
polecenie w Max OS X Lion sortowało pliki i katalogi podobnie jak Ubuntu Linux (bez uwzględniania wielkości liter, katalogów NIE na górze, plików kropek NIE na górze)? Idealnie chciałbym to zrobić bez przesyłania danych wyjściowych do innego polecenia, takiego jak sort.
Na przykład chcę zobaczyć:
foo
Foobar
MyStuff/
.stuff/
test.txt
zamiast:
.stuff
Foobar
MyStuff/
foo
test.txt
W systemie Linux ls
kolejność sortowania jest kontrolowana w szczególności przez ustawienia regionalne systemu LC_COLLATE
. Kiedy LC_COLLATE=en_US.UTF-8
ls posortuje elementy tak, jak chcę. Kiedy LC_COLLATE=C
, ls
posortuje podobnie jak OS X.
LC_COLLATE
jest ustawiony na en_US.UTF-8
OS X, ale ls
nadal sortuje stary POSIX
sposób. Czy ktoś wie, jak mogę sprawić, aby działał bardziej jak Linux?
Odpowiedzi:
To może nie być możliwe:
Źródło: http://ask.metafilter.com/130292/CaseInsensitive-LS-on-Mac-OS-X
ORYGINALNA ODPOWIEDŹ
To polecenie nie sortuje plików kropek, ale wyświetla dodatkowe listy katalogów
Zbliżyłem się do tego:
źródło
Wiem, że udzielono odpowiedzi, ale dla mnie to działa najlepiej:
Wyświetla wszystkie szczegóły i sortuje je, ignorując wielkość liter.
źródło
Przez jakiś czas mnie to denerwowało i wreszcie udało mi się to uporządkować (heh). Po wypróbowaniu kilku sugestii, które nie zadziałały, oto, co zadziałało.
Jeśli chcesz zainstalować MacPorts (lub Homebrew lub Fink), wersja ls GNU robi dokładnie to, co chcesz. Sam używam MacPorts, więc to podejście wyjaśnię:
Pobierz i zainstaluj MacPorts:
http://www.macports.org
Zainstaluj pakiet GNU Coreutils:
sudo port install coreutils
Powinieneś mieć teraz ls GNU:
gls
. Wypróbuj w katalogu, który zawiera elementy zaczynające się zarówno dużymi, jak i małymi literami:gls -U
(Ta
-U
opcja w rzeczywistości oznacza „nieposortowane”, ale w systemie OS X ma to pożądany wpływ na to, aby rozróżniała wielkość liter).Dodaj ten alias do swojego,
.bash_profile
aby zwykłyls
działał tak, jak chcesz (podoba mi się kolor, ale możesz to pominąć, jeśli chcesz; potrzebujesz tylko-U
):alias ls='gls -U --color'
Pamiętaj, że ta
-U
opcja prawdopodobnie nie będzie działać na innych platformach. W OS X zawsze wydaje się, że robi to dobrze (być może dlatego, że HFS + skutecznie rozróżnia małe i wielkie litery - technicznie „rozpoznaje małe i małe litery”), ale jeśli spróbujesz na Linuksie, wyniki najprawdopodobniej po prostu nie będą w ogóle posortowane.źródło
Dodając do tego, co napisał Mike powyżej, posunąłem się nieco dalej i znalazłem sposób na zdefiniowanie własnych reguł zestawiania.
Definicje ustawień regionalnych znajdują się w / usr / share / locale /. Każdy folder jest ustawieniem regionalnym i ma plik (lub link) LC_COLLATE, który określa, które symbole są „takie same” (na przykład, że U, u i ü należy brać pod uwagę przy zamawianiu). Możesz zduplikować katalog, a to utworzy nową definicję ustawień regionalnych:
Teraz będziesz mieć nowe ustawienia narodowe o nazwie „en_GB.UTF-8-CI” („CI” dla bez rozróżniania wielkości liter) i możesz z niego korzystać LC_COLLATE.
Teraz, aby zmienić LC_COLLATE w nowym języku, możesz pobrać źródła ustawień regionalnych z http://www.opensource.apple.com/source/adv_cmds/adv_cmds-119/usr-share-locale.tproj/colldef/ , edytuj ten to najbliżej tego, co chcesz i uruchom
a teraz kiedy biegniesz
będziesz miał sortowanie zgodnie z własnymi zasadami.
Tak, właśnie to powoduje, że wielkość liter „ls” nie uwzględnia wielkości liter.
źródło
Aby obejść ten problem, możesz użyć funkcji i aliasu:
Powoduje to, że wynik standardowego polecenia ls jest sortowany bez rozróżniania wielkości liter.
źródło
Za pomocą
pracuje dla mnie.
-f oficjalnie wyłącza sortowanie, ale wygląda na to, że świeci oryginalny sort HFS, który jest dokładnie bez rozróżniania wielkości liter.
Wydaje mi się, że tak naprawdę zależy to od tego, czy w formacie HD rozróżniana jest wielkość liter, czy nie, ale ponieważ format HFS z rozróżnianiem wielkości liter jest domyślny dla dysków systemowych Mac OS X, to powinno działać dla większości użytkowników.
źródło
Zainspirowany odpowiedzią Mike'a, dodałem następujące polecenie do / etc / bashrc i działa to pięknie w Mojave. Wyświetla listę ukrytych plików na końcu, gdy dodaje się -a, ale to mi nie przeszkadza.
Możesz zobaczyć nową konfigurację, uruchamiając polecenie locale. Aby przywrócić, wystarczy usunąć linię z / etc / bashrc i zalogować się ponownie do terminala.
Zauważ, że ani ls -f1, ani ls -f nie działały dla mnie w Mojave. Skończyłem z naprawdę nieposortowaną listą. Tylko rozwiązanie, które podałem, działało dla mnie w Mojave.
źródło
.bashrc
lub.zshrc
:alias ls="LC_COLLATE=cs_CZ.ISO8859-2 ls"
Biegać:
Prawdopodobnie przekonasz się, że twoje
ls
polecenie jest pseudonimem.źródło
ls is /bin/ls
. Na OS X:ls is hashed (/bin/ls)
. Tak czy inaczej, nawet jeśli zadzwonię/bin/ls
bezpośrednio, nadal nie będzie sortować według LC_COLLATE.ls
dowództwo zostało pseudonimem--group-directories-first
. Nadal można to zrobić gdzie indziej, ale nie jako alias.Jeśli zajmujesz się głównie porządkiem sortowania plików kropek, możesz sortować według rozszerzenia : użyj
ls
polecenia z GNU Fileutils z opcją--sort=extension
. (Możesz zainstalować GNU Fileutils np. Poprzez Macports.)źródło
ls sortuje według LC_COLLATE, po prostu większość wszystkich plików LC_COLLATE jest ustawiona na sortowanie z rozróżnianiem wielkości liter. http://collation-charts.org/fbsd54/
Są dwa ustawione na sortowanie bez rozróżniania wielkości liter: cs_CZ.ISO8859-2 i et_EE.ISO8859-15 et_EE.ISO8859.15 nie sortuje „Z” tak, jak chcieliby tego anglojęzyczni. cs.CZ.ISO8859-15 robi dobrą robotę z alfabetem, chciałbym tylko, żeby sortował „~” przed znakami alfabetycznymi.
Moje rozwiązanie to: LC_COLLATE = cs_CZ.ISO8859-2 / bin / ls -FG
Zastanawiam się, czy można utworzyć niestandardowy plik LC_COLLATE do obsługi „.” tak jak chcesz i „~” tak jak ja chcę.
źródło