ls не перечисляет мои файлы в правильном порядке - PullRequest
0 голосов
/ 27 августа 2018

Когда я набираю ls в bash, он должен получить имена файлов и каталогов в алфавитном порядке по умолчанию.

К сожалению, я получаю следующий результат:

--  ---  00  -01  01  -02 

В результате я ожидал:

--  ---  -01  -02  00  01  

Символы - в именах файлов мешают правильной работе сортировки по умолчанию.Мне нужно, чтобы имена файлов были отсортированы тем же способом, что и php strcmp.

Почему символ - вызывает проблемы с сортировкой?Есть ли другие символы, которые могут вызвать проблемы?Как лучше всего использовать bash для точной сортировки имен файлов?

Редактировать

Команда ls возвращала те же неверные результаты на моем домашнем компьютере с Manjaro имой сервер резервного копирования, использующий команду ltfp.

Использование LC_ALL=C ls -1 в качестве paxdiablo , предложенного в его ответе, работает при тестировании на Majaro, но не повезло заставить его работать при использовании lftp:

echo $(lftp -e "set ftp:ssl-force true; set ssl:verify-certificate no; cd "$1"; LC_ALL=C ls" -u $username,$password $server)

Редактировать - Решено

В lftp, cls -l получает правильный заказ и с полной информацией, которая мне нужна.

echo $(lftp -e "set ftp:ssl-force true; set ssl:verify-certificate no; cd "$1"; cls -l" -u $username,$password $server)

1 Ответ

0 голосов
/ 27 августа 2018

Это связано с сортировкой по умолчанию, указанной в вашей локали.Вы можете узнать какую локаль она будет использовать с помощью команды ... хм, позвольте мне подумать, ... да, вот так, locale: -)

pax$ locale
LANG=en_AU.UTF-8
LANGUAGE=en_AU:en
LC_CTYPE="en_AU.UTF-8"
LC_NUMERIC="en_AU.UTF-8"
LC_TIME="en_AU.UTF-8"
LC_COLLATE="en_AU.UTF-8"
LC_MONETARY="en_AU.UTF-8"
LC_MESSAGES="en_AU.UTF-8"
LC_PAPER="en_AU.UTF-8"
LC_NAME="en_AU.UTF-8"
LC_ADDRESS="en_AU.UTF-8"
LC_TELEPHONE="en_AU.UTF-8"
LC_MEASUREMENT="en_AU.UTF-8"
LC_IDENTIFICATION="en_AU.UTF-8"
LC_ALL=

ЕслиВы устанавливаете для локали что-то более разумное (a) , вы увидите, что оно действует как нужно:

pax$ ls
--  ---  00  01  -01  -02
pax$ LANG=C ls
--  ---  -01  -02  00  01

(a) Определяется в контексте этого вопроса как C.

...