Se não estiver classificando por nome sem argumentos, convém verificar se ls foi aliasado para outra coisa ou simplesmente invocá-lo usando o caminho completo que eliminaria quaisquer aliases existentes.
Tvanfosson 18/05/2009
O gnu-coreutils ls classifica por padrão. Qual é o sistema que você está usando (como outros têm perguntado)
Nick Fortescue
Tem certeza de que está pedindo para classificar por nome e não por tipo (ou seja, diretório primeiro e depois arquivos)?
Curtisk 18/05/09
Letras maiúsculas vêm antes de letras minúsculas, assim o arquivo Z vem antes do arquivo a ... como posso corrigir isso?
ArtOfWarfare
A página de manual diz 'classificada separadamente e em ordem lexicográfica'. Os arquivos serão classificados de acordo com o primeiro caractere: numéricos [0..9] e caracteres superior [a..z] e Lowe caracteres [a..z]
Gürol Canbek
Respostas:
131
Meu ls classifica por nome por padrão. O que você está vendo?
man ls afirma:
List information about the FILEs (the current directory by default). Sort entries alpha‐betically if none of -cftuvSUX nor --sort is specified.:
Existe uma maneira de classificar arquivos como este: ls | sort -n1.1.1; 1.1.2; 1.1.3; 2.10.1; 2.10.15; 2.10.2; 2.10.20; 2.10.21; 2.1.1; 2.1.10; 2.1.15; 2.1.2; 2.1.3; 2.1.4; 10.1.1; 10.1.2; 10.1.3; 11.0.1; 11.0.2; 11.0.20; 11.0.21; 11.0.22; Como você pode ver 2.10.15 antes de 2.10.2 .
BBK 14/02
Estou desenvolvendo o Android em um dispositivo Pidion e o ls não se classifica automaticamente, então isso foi muito útil! O único problema é que parece que ele classifica soft links, mas não classificar os arquivos, por algum motivo
Mitch
No Mac, parece que o segundo comando pode ser reduzido para ls -1r.
Ash Ryan Arnwine
4
@BBK sort -V ordenará por números de versão, para que você obtenha .. 2.10.2; 2.10.15; .. from man sort .. --sort = WORD classificará de acordo com WORD: numérico geral -g, numérico humano -h, mês -M, numérico -n, aleatório -R, versão -V
mosh
35
lsfrom coreutilsrealiza uma classificação com reconhecimento de localidade por padrão e, portanto, pode produzir resultados surpreendentes em alguns casos (por exemplo, %fooclassificará entre bare quuxdentro LANG=en_US). Se você deseja uma classificação ASCIIbetics, use
LANGilfnuence o comportamento de classificação, este post me ajuda muito!
precisa saber é o seguinte
Isso funcionou para mim também. você poderia elaborar isso? Por que é diferente?
Kostas28
1
Essa dose funciona, mas gera saída ?para todos os caracteres não-ascii quando a saída é um terminal (o recurso ruim de ls verifica se a saída é para um terminal, funciona ao canalizar). Você pode "consertar" isso com o canal para cat, usar o C.UTF-8código do idioma (se o seu sistema suportar) e / ou usar o -bsinalizador. Ainda melhor, não use lsem tudo, melhor aproveitamento `
12431234123412341234123
Isso me ajudou a descobrir que, para mim, o problema era que alguns dos meus nomes de arquivos continham um hífen (-) e outros, um traço (-). lsclassifica hífens antes de traços.
Jamy Mahabier
17
A beleza das ferramentas * nix é que você pode combiná-las:
ls -l | sort -k9,9
A saída de ls -lserá assim
-rw-rw-r-- 1 luckydonald luckydonald 532 Feb 21 2017 Makefile
-rwxrwxrwx 1 luckydonald luckydonald 4096 Nov 17 23:47 file.txt
Então, com 9,9você classificar coluna 9até a coluna 9, sendo os nomes dos arquivos. Você deve fornecer onde parar, que é a mesma coluna neste caso. As colunas começam com 1.
Além disso, se você deseja ignorar letras maiúsculas / minúsculas, adicione --ignore-caseao comando de classificação.
Descoberto, significa classificar a coluna 9para a mesma coluna 9. Uma lssaída normal se parece com drwx------ 8 999 user 4.0K Feb 5 2017 file.txtisso:, portanto, a coluna 9 é o nome dos arquivos. Se você deseja ignorar o caso, use --ignore-casena classificação.
Isto não é sempre verdade. Não sei exatamente as circunstâncias que fazem isso não ser verdade, mas na minha máquina executando o Ubuntu 12.04 a saída de ls é classificada em ordem alfabética (ignorando o caso).
Patrick James McDougle
Boa pegada! Parece que é requisitá-lo com base no código ASCII .. alfabetos maiúsculas são seguidos por letras minúsculas ..
Kent Pawar
1
Percebi que meu MacOS classifica os primeiros números, depois as maiúsculas, as sublinhadas e as minúsculas. É engraçado que eles não diferenciam maiúsculas de minúsculas. Por outro lado, meu Debian faz distinção entre maiúsculas e minúsculas, mas classifica as letras sem sensibilidade, a menos que haja um empate e, em seguida, vitórias em minúsculas! Exemplo: ABA.txt ABb.txt aBC.txt AbC.txt ABc.txt
zk82 15/16/16
Eu também estou no MAC. Fiquei decepcionado ao ver o tipo de classificação A, Z, a, z. Estou aqui porque prefiro ter A, a, Z, a. obrigado pela sua dica. experimentará as normalsoluções aqui.
Neyxee
8
Os arquivos que diferem apenas por uma sequência numérica podem ser classificados nesse número na condição de ser precedido por um separador.
@ Norbert: Você está correto, mas which lsteria sucesso mesmo se o bash tivesse um ls embutido. Em vez disso, faça builtin lsno bash e obtenha um erro.
Pianosaurus
4
@ Norbert: whichsempre retorna um caminho. Use type lspara determinar o que o shell pensa que lsé (interno, função, executável).
Ephemient 18/05/09
3
O lsutilitário deve estar em conformidade com IEEE Std 1003.1-2001 ( POSIX.1), que afirma:
22027: deve classificar operandos de diretório e não diretório separadamente de acordo com a sequência de intercalação no código de idioma atual.
26027: Por padrão, o formato não é especificado, mas a saída deve ser classificada em ordem alfabética pelo nome do símbolo:
Nome da biblioteca ou do objeto, se −A for especificado
In Debian Jessie, this works nice:
ls -lah --group-directories-first
# l=use a long listing format
# a=do not ignore entries starting with .
# h=human readable
# --group-directories-first=(obvious)
# Note: add -r for reverse alpha
# You might consider using lh by appending to ~/.bashrc as the alias:
~$ echo "alias lh='ls -lah --group-directories-first'" >>~/.bashrc
# -- restart your terminal before using lh command --
Respostas:
Meu ls classifica por nome por padrão. O que você está vendo?
man ls
afirma:List information about the FILEs (the current directory by default). Sort entries alpha‐betically if none of -cftuvSUX nor --sort is specified.
:fonte
ls
não classifica se-c1
especificado: existe uma maneira de fazê-lo? (--sort=name
parece não funcionar)ls -la
, vejo.bashrc - can - .config - Downloads - .local - tmp
.bashrc - .config - .local - Downloads - can - tmp
Para algo simples, você pode combinar ls com classificação . Para apenas uma lista de nomes de arquivos:
ls -1 | ordenar
Para classificá-los na ordem inversa:
ls -1 | classificar -r
fonte
ls | sort -n
1.1.1; 1.1.2; 1.1.3; 2.10.1; 2.10.15; 2.10.2; 2.10.20; 2.10.21; 2.1.1; 2.1.10; 2.1.15; 2.1.2; 2.1.3; 2.1.4; 10.1.1; 10.1.2; 10.1.3; 11.0.1; 11.0.2; 11.0.20; 11.0.21; 11.0.22; Como você pode ver 2.10.15 antes de 2.10.2 .ls -1r
.ls
fromcoreutils
realiza uma classificação com reconhecimento de localidade por padrão e, portanto, pode produzir resultados surpreendentes em alguns casos (por exemplo,%foo
classificará entrebar
equux
dentroLANG=en_US
). Se você deseja uma classificação ASCIIbetics, usefonte
LANG
ilfnuence o comportamento de classificação, este post me ajuda muito!?
para todos os caracteres não-ascii quando a saída é um terminal (o recurso ruim de ls verifica se a saída é para um terminal, funciona ao canalizar). Você pode "consertar" isso com o canal para cat, usar oC.UTF-8
código do idioma (se o seu sistema suportar) e / ou usar o-b
sinalizador. Ainda melhor, não usels
em tudo, melhor aproveitamento `ls
classifica hífens antes de traços.A beleza das ferramentas * nix é que você pode combiná-las:
A saída de
ls -l
será assimEntão, com
9,9
você classificar coluna9
até a coluna9
, sendo os nomes dos arquivos. Você deve fornecer onde parar, que é a mesma coluna neste caso. As colunas começam com1
.Além disso, se você deseja ignorar letras maiúsculas / minúsculas, adicione
--ignore-case
ao comando de classificação.fonte
-k9,9
significa isso ?9
para a mesma coluna9
. Umals
saída normal se parece comdrwx------ 8 999 user 4.0K Feb 5 2017 file.txt
isso:, portanto, a coluna 9 é o nome dos arquivos. Se você deseja ignorar o caso, use--ignore-case
na classificação.AVISO: "a" aparece APÓS "Z":
$ touch A.txt aa.txt Z.txt
$ ls
A.txt Z.txt aa.txt
fonte
normal
soluções aqui.Os arquivos que diferem apenas por uma sequência numérica podem ser classificados nesse número na condição de ser precedido por um separador.
Nesse caso, a seguinte sintaxe pode ser usada:
Exemplo:
fonte
Na página do manual (para bash ls):
fonte
which ls
teria sucesso mesmo se o bash tivesse um ls embutido. Em vez disso, façabuiltin ls
no bash e obtenha um erro.which
sempre retorna um caminho. Usetype ls
para determinar o que o shell pensa quels
é (interno, função, executável).O
ls
utilitário deve estar em conformidade com IEEE Std 1003.1-2001 (POSIX.1
), que afirma:fonte
Verifique se
.bashrc
há aliases no seu arquivo.fonte
alias
para verificar todos os aliases atuais.ls -X funciona para esse fim, caso você tenha alsado ls a um padrão mais útil.
fonte
fonte