Intereting Posts
Отключить ForwardX11Timeout без ForwardX11Trusted в OpenSSH Client? Как отправить вывод команды в буфер режима копирования экрана GNU Как найти HD-файлы, связанные с точкой монтирования сценарий оболочки, чтобы найти комбинацию элементов массива Как я могу запустить одну и ту же команду в Mac-терминале для нескольких файлов в папке? Обновление кучи компьютеров Mac через SSH. Может помочь Мышь и клавиатура не работают в Windows 8.1 после двойной загрузки Ubuntu? Где firefox получает приложения «по умолчанию» для открытия файлов? Запуск процесса в удаленном браузере Обновлен до Ubuntu 14.04 – Почтовый сервер отсутствует dovecot-lmtp, даже если он установлен Линия печати, использующая только egrep Может видеть файл в / usr / local / bin с ls, но попытка его запуска дает файл не найден? Почему опция -v с rm показывает записи с обратным отсчетом и обычной цитатой? Как показать страницу человека из файла? rcs и графический diff

Как я могу сначала показать «ls» dotfiles, оставаясь без учета регистра?

Создайте следующие файлы в каталоге.

$ touch .a .bab AB 你好嗎 

Мой порядок по умолчанию игнорирует присутствие ведущих точек, смешивая их с другими файлами.

 $ ls -Al total 0 -rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 a -rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 .a -rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 A -rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 b -rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 .b -rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 B -rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:06 你好嗎 

Я могу изменить LC_COLLATE чтобы LC_COLLATE поставить dotfiles.

 $ LC_COLLATE=C ls -Al total 0 -rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 .a -rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 .b -rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 A -rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 B -rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 a -rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 b -rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:06 你好嗎 

К сожалению, это делает порядок сортировки чувствительным к регистру, то есть A и B предшествуют a и b . Есть ли способ распечатать dotfiles сначала, оставаясь без учета регистра ( A и предшествующие B и b )?

Изменить: попытка изменить LC_COLLATE

Ни один из ответов до сих пор полностью не воспроизводит функциональность ls . Разумеется, я мог бы обернуть некоторые из них функцией, но это должно было бы включать в себя некоторый подробный код (например), как работать без аргумента или поставки каталога в качестве аргумента. Или как иметь дело с явным флагом -d .

В качестве альтернативы я подумал, что может быть лучше использовать LC_COLLATE . Однако я не могу сделать эту работу. В настоящее время я использую LC_COLLATE="en_AU.UTF-8" . Я проверил /usr/share/i18n/locales/en_AU (хотя я не уверен, что это правильный файл, поскольку я не вижу ссылки на UTF-8 ); Я нашел следующее.

 LC_COLLATE copy "iso14651_t1" END LC_COLLATE 

/usr/share/i18n/locales/iso14651_t1 содержит copy "iso14651_t1_common" . Наконец, /usr/share/i18n/locales/iso14651_t1_common содержит

  <U002E> IGNORE;IGNORE;IGNORE;<U002E> # 47 . 

Я удалил эту строку, запустил sudo locale-gen и перезапустил мой компьютер. К сожалению, это ничего не изменило.

OP был очень близок к редактированию /usr/share/i18n/locales/iso14651_t1_common , но трюк заключается не в том, чтобы удалить строку

 <U002E> IGNORE;IGNORE;IGNORE;<U002E> # 47 . 

а скорее изменить его на

 <U002E> <RES-1>;IGNORE;IGNORE;<U002E> # 47 . 

Почему это работает

Операторы IGNORE указывают, что при заказе слов в алфавитном порядке игнорируется полная остановка (aka period, или символ <U002E> ). Чтобы сделать ваши dotfiles на первом месте, измените IGNORE на символ сортировки, который встречается перед всеми другими символами. Символы сортировки определяются строками типа

 collating-symbol <something-inside-angle-brackets> 

и они упорядочены по внешнему виду линии

 <something-inside-angle-brackets> 

В моей копии iso14651_t1_common символ первого места сортировки <RES-1> , который появляется в строке 3458. Если файл отличается, используйте тот символ, который упорядочен первым.

Подробная информация о порядке символов с помощью LC_COLLATE

<U002E> имеет три оператора IGNORE поскольку буквы можно сравнивать несколько раз в случае связей. Чтобы понять это, рассмотрите строчные буквы a и uppercase A (которые являются частью группы символов, которые фактически сравниваются четыре раза):

 <U0061> <a>;<BAS>;<MIN>;IGNORE # 198 a <U0041> <a>;<BAS>;<CAP>;IGNORE # 517 A 

Наличие нескольких раундов сравнения позволяет создавать файлы, начинающиеся с «a» и «A», которые должны быть сгруппированы вместе, поскольку оба они сравниваются как <a> во время первого прохода, со следующей буквой, определяющей порядок. Если все следующие буквы одинаковы (например, a.txt и A.txt ), третий a.txt поместит a.txt первым, потому что символ сопоставления для строчных букв <MIN> отображается в строке 3467, перед символом сортировки для верхнего регистра буквы <CAP> (строка 3488).

Внедрение этого изменения

Если вы хотите, чтобы период LC_COLLATE каждый раз, когда программа заказывает буквы с использованием LC_COLLATE , вы можете изменить iso14651_t1_common как описано выше, и перестроить файл ваших мест. Но если вы хотите внести это изменение только в ls и без доступа root, вы можете скопировать исходные файлы локали в другой каталог, прежде чем изменять их.

Что я сделал

Моя локаль по умолчанию – en_US, поэтому я скопировал en_US , iso14651_t1 и iso14651_t1_common в $HOME/path/to/new/locales . Там я сделал вышеупомянутое изменение iso14651_t1_common и переименовал en_US в en_DOTFILE . Затем я скомпилировал локаль en_DOTFILE с

 localedef -i en_DOTFILE -f UTF-8 -vc $HOME/path/to/new/locales/en_DOTFILE.UTF-8 

Чтобы заменить заказ ls по умолчанию, создайте BASH-скрипт ls :

 #!/bin/bash LOCPATH=$HOME/path/to/new/locales LANG=en_DOTFILE.UTF-8 ls "$@" 

сохраните его где-нибудь, который появится перед /usr/bin на вашем пути, и сделайте его исполняемым с помощью chmod +x ls .

Вместо этого вы можете использовать порядок сортировки оболочки (что может не включать порядок сортировки локали: bash , AT & T ksh , yash , tcsh и zsh дают ожидаемые результаты, mksh и dash – нет. Кажется, что fish дает нечувствительный к регистру порядок, но дает разные результаты при наличии символов, отличных от ASCII):

 ls -dUl -- .* * 

Это дает явный список файлов (и каталогов) для списка и дезактивирует сортировку ls ( -U , которая является расширением GNU).

Есть несколько предостережений, в зависимости от используемой оболочки.

  • С помощью zsh опция nomatch по умолчанию nomatch к сбою команды, если каталог не содержит скрытых и не скрытых файлов; вы можете отключить nomatch чтобы этого избежать, но лучше было бы сделать вместо этого set -o cshnullglob (и команда провалиться, только если ни один из глобусов не соответствует, как в (t)csh или ранних Unix-оболочках).
  • С zsh , pdksh и его производными и fish расширение .* не включает . и .. , так что это соответствует ls -Al . С другими раковинами . и .. включены так, чтобы он соответствовал ls -al . В последнем случае вам нужно будет изменить шаблоны глобусов для исключения . и .. ( ls -dUl -- ..?* .[!.]* * ).
  • За исключением fish , (t)csh или zsh , если какой-либо из шаблонов глобуса ничего не соответствует, ls выдаст сообщение об ошибке; вы можете избежать этого, установив опцию nullglob (по крайней мере, в bash или zsh ) или перенаправляя stderr в /dev/null ( ls -dUl -- ..?* .[!.]* * 2>/dev/null ). Если вы используете nullglob , следите за потенциально неожиданным поведением, которое вызывает (см. nullglob Shell есть?? ). fish ведет себя как bash с nomatch за исключением того, что в интерактивном режиме будет выдано предупреждающее сообщение для каждого шарика, который не соответствует.

(Спасибо Stéphane Chazelas за все отзывы!)

Вы можете просто использовать две отдельные команды ls :

 $ ls -dl ..?* .[^.]* 2>/dev/null ; ls -dl * -rw-r--r--. 1 sparhawk sparhawk 0 8 Jun 09:29 .a -rw-r--r--. 1 sparhawk sparhawk 0 8 Jun 09:29 .b -rw-r--r--. 1 sparhawk sparhawk 0 8 Jun 09:29 a -rw-r--r--. 1 sparhawk sparhawk 0 8 Jun 09:29 A -rw-r--r--. 1 sparhawk sparhawk 0 8 Jun 09:29 b -rw-r--r--. 1 sparhawk sparhawk 0 8 Jun 09:29 B -rw-r--r--. 1 sparhawk sparhawk 0 8 Jun 09:29 你好嗎 

В отличие от других ответов до сих пор, этот подход отображает файлы точек, сначала избегая . и .. записи, затем остальные записи в алфавитном порядке.

Ответ @StephenKitt может быть улучшен, хотя для достижения такого же результата:

 $ ls -dUl ..?* .[^.]* * 2>/dev/null 

Вы можете играть с параметрами команды ls . Попробуй это:

 # ls -laXr 

Где:

 -l use a long listing format -a, --all do not ignore entries starting with . -X sort alphabetically by entry extension -r, --reverse reverse order while sorting