Как сделать ls
команду в Max OS X Lion для сортировки файлов и каталогов, аналогично тому, как это делает Ubuntu Linux (без учета регистра, каталоги НЕ сверху, точечные файлы НЕ сверху)? В идеале я хотел бы сделать это без передачи вывода в другую команду, такую как сортировка.
Например, я хочу увидеть:
foo
Foobar
MyStuff/
.stuff/
test.txt
вместо того:
.stuff
Foobar
MyStuff/
foo
test.txt
В Linux ls
порядок сортировки контролируется, в частности, локалью системы LC_COLLATE
. Когда LC_COLLATE=en_US.UTF-8
ls будет сортировать элементы так, как я хочу. Когда LC_COLLATE=C
, ls
будет сортировать аналогично OS X.
LC_COLLATE
установлен en_US.UTF-8
в OS X, но ls
все еще сортирует по-старому POSIX
. Кто-нибудь знает, как я могу заставить это вести себя как Linux?
Ответы:
Это может быть невозможно:
Источник: http://ask.metafilter.com/130292/CaseInsensitive-LS-on-Mac-OS-X
ОРИГИНАЛЬНЫЙ ОТВЕТ
Эта команда не сортирует точечные файлы, но показывает дополнительные списки каталогов
Я подошел близко к этому:
источник
Я знаю, что на это ответили, но эта работа лучше всего для меня:
Он перечисляет все детали и сортирует их, игнорируя регистр.
источник
Это давало мне покой на некоторое время, и я, наконец, разобрался (хех). Попробовав несколько предложений, которые не сработали, вот что сработало.
Если вы готовы установить MacPorts (или Homebrew, или Fink), GNU-версия ls делает именно то, что вам нужно. Я сам использую MacPorts, поэтому я объясню этот подход:
Загрузите и установите MacPorts:
http://www.macports.org
Установите пакет GNU Coreutils:
sudo port install coreutils
Теперь вы должны иметь GNU LS:
gls
. Попробуйте это в каталоге, который содержит элементы, которые начинаются с прописных и строчных букв:gls -U
(
-U
Опция фактически означает «несортированный», но в OS X это дает желаемый эффект, заключающийся в том, что он не учитывает регистр.)Добавьте этот псевдоним в свой файл,
.bash_profile
чтобы обычныйls
работал так, как вы этого хотите (мне нравится вывод цвета, но вы можете пропустить его, если хотите; вам нужен только-U
):alias ls='gls -U --color'
Обратите внимание, что эта
-U
опция, вероятно, не будет работать на других платформах. В OS X это всегда кажется правильным (возможно, потому что HFS + эффективно нечувствителен к регистру - «учитывает регистр», технически), но если вы попробуете это на Linux-коробке, результаты, скорее всего, просто не будут отсортировано на всех.источник
В дополнение к тому, что Майк написал выше, я пошел дальше и нашел способ определить свои собственные правила сортировки.
Определения локали находятся в / usr / share / locale /. Каждая папка является локалью и имеет файл (или ссылку) LC_COLLATE, который определяет, какие символы являются «одинаковыми» (например, что U, u и ü должны считаться одинаковыми при заказе). Вы можете дублировать каталог, и это создаст новое определение локали:
Теперь у вас будет новый языковой стандарт под названием 'en_GB.UTF-8-CI' ('CI' для нечувствительного к регистру), и вы сможете использовать LC_COLLATE оттуда.
Теперь, чтобы изменить LC_COLLATE в новой локали, вы можете скачать источники локали с http://www.opensource.apple.com/source/adv_cmds/adv_cmds-119/usr-share-locale.tproj/colldef/ , отредактировать это ближе всего к тому, что вы хотите и запустить
и теперь, когда ты бежишь
у вас будет сортировка по вашим правилам.
Да, это то, что нужно для того, чтобы сделать сортировку 'ls' без учета регистра.
источник
В качестве обходного пути вы можете использовать функцию и псевдоним:
Это создает нечувствительный к регистру вывод для стандартной команды ls.
источник
С помощью
работает для меня.
-f официально отключает любую сортировку, но похоже, что тогда просвечивает оригинальная сортировка HFS, что в точности учитывает регистр.
Я думаю, это на самом деле зависит от того, чувствителен ли к вашему HD формат с учетом регистра или нет, но поскольку формат HFS без учета регистра используется по умолчанию для системных дисков Mac OS X, это должно работать для большинства пользователей.
источник
Вдохновленный ответом Майка, я добавил следующее в / etc / bashrc, и это прекрасно работает в Мохаве. При добавлении -a в конце перечисляются скрытые файлы, но это меня не беспокоит.
Вы можете увидеть новую конфигурацию, запустив команду locale. Чтобы вернуться, просто удалите строку из / etc / bashrc и войдите обратно в терминал.
Обратите внимание, что ни ls -f1, ни ls -f у меня не работали в Мохаве. Я получил действительно несортированный список. Только решение, которое я предоставил, работало для меня в Мохаве.
источник
.bashrc
или.zshrc
:alias ls="LC_COLLATE=cs_CZ.ISO8859-2 ls"
Бег:
Вы, вероятно, обнаружите, что ваша
ls
команда является псевдонимом.источник
ls is /bin/ls
. На OS X:ls is hashed (/bin/ls)
. В любом случае, даже если я позвоню/bin/ls
напрямую, он все равно не сортируется в соответствии с LC_COLLATE.ls
команда была добавлена--group-directories-first
. Это может все еще быть сделано где-то еще, только не псевдоним.Если вас в основном интересует порядок сортировки файлов точек, вы можете сортировать по расширению : используйте
ls
команду из GNU Fileutils с опцией--sort=extension
. (Вы можете установить GNU Fileutils, например, через macports.)источник
ls сортирует в соответствии с LC_COLLATE, просто большинство файлов LC_COLLATE настроены на сортировку с учетом регистра. http://collation-charts.org/fbsd54/
Для сортировки без учета регистра заданы два параметра: cs_CZ.ISO8859-2 и et_EE.ISO8859-15 et_EE.ISO8859.15 не сортирует «Z» так, как хотелось бы носителям английского языка. cs.CZ.ISO8859-15 хорошо справляется с алфавитом, я просто хотел бы, чтобы он сортировал "~" перед алфавитными символами.
Мое решение: LC_COLLATE = cs_CZ.ISO8859-2 / bin / ls -FG
Интересно, можно ли создать собственный файл LC_COLLATE для обработки "." так, как вы хотите, и «~», как я хочу.
источник