¿Puedes ordenar un listado de ls por nombre?
¿Puedes ordenar un listado de ls por nombre?
Respuestas:
Mi ls ordena por nombre por defecto. ¿Qué estas viendo?
man ls
estados:
List information about the FILEs (the current directory by default). Sort entries alpha‐betically if none of -cftuvSUX nor --sort is specified.
:
ls
no se ordena si se -c1
especifica: ¿hay alguna manera de hacerlo? ( --sort=name
no parece funcionar)
ls -la
, ya veo:, el .bashrc - can - .config - Downloads - .local - tmp
nombre sería:.bashrc - .config - .local - Downloads - can - tmp
Para algo simple, puede combinar ls con sort . Para solo una lista de nombres de archivo:
ls -1 | ordenar
Para ordenarlos en orden inverso:
ls -1 | sort -r
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 puede ver 2.10.15 antes de 2.10.2 .
ls -1r
.
ls
from coreutils
realiza una ordenación basada en la configuración regional de forma predeterminada y, por lo tanto, puede producir resultados sorprendentes en algunos casos (por ejemplo, %foo
se ordenará entre bar
y quux
dentro LANG=en_US
). Si desea una clasificación ASCIIbetical, use
LANG=C ls
LANG
Sin tener en cuenta el comportamiento de clasificación, esta publicación me ayudó mucho.
?
para cada carácter no ascii cuando la salida es un terminal (la característica incorrecta de ls verifica si sale a un terminal, funciona cuando se canaliza). Puede "arreglar" esto con tuberías a cat, usar la C.UTF-8
configuración regional (si su sistema lo admite) y / o usar la -b
bandera. Aún mejor, no lo use ls
en absoluto, mejor uso `
ls
ordena guiones antes de guiones.
La belleza de las herramientas * nix es que puedes combinarlas:
ls -l | sort -k9,9
La salida de ls -l
se verá así
-rw-rw-r-- 1 luckydonald luckydonald 532 Feb 21 2017 Makefile
-rwxrwxrwx 1 luckydonald luckydonald 4096 Nov 17 23:47 file.txt
Entonces, con la 9,9
clasificación de la columna 9
hasta la columna 9
, son los nombres de los archivos. Debe proporcionar dónde detenerse, que es la misma columna en este caso. Las columnas comienzan con 1
.
Además, si desea ignorar mayúsculas / minúsculas, agregue --ignore-case
al comando ordenar.
-k9,9
significa
9
hasta la misma columna 9
. Una ls
salida normal se ve así: drwx------ 8 999 user 4.0K Feb 5 2017 file.txt
así que la columna 9 son los nombres de los archivos. Si quieres ignorar el caso, úsalo --ignore-case
en sort.
AVISO: "a" viene DESPUÉS de "Z":
$ touch A.txt aa.txt Z.txt
$ ls
A.txt Z.txt aa.txt
normal
soluciones aquí.
Los archivos que son diferentes solo por una cadena numérica se pueden ordenar en este número a condición de que esté precedido por un separador.
En este caso, se puede usar la siguiente sintaxis:
ls -x1 file | sort -t'<char>' -n -k2
Ejemplo:
ls -1 TRA*log | sort -t'_' -n -k2
TRACE_1.log
TRACE_2.log
TRACE_3.log
TRACE_4.log
TRACE_5.log
TRACE_6.log
TRACE_7.log
TRACE_8.log
TRACE_9.log
TRACE_10.log
Desde la página del manual (para bash ls):
Ordene las entradas alfabéticamente si ninguna de -cftuSUX ni --sort.
which ls
tendría éxito incluso si bash tuviera un ls incorporado. Más bien, hazlo builtin ls
en bash y obtén un error.
which
siempre devuelve una ruta. Se usa type ls
para determinar qué piensa el shell ls
(integrado, función, ejecutable).
La ls
utilidad debe cumplir con IEEE Std 1003.1-2001 ( POSIX.1
) que establece:
22027: clasificará los operandos con y sin directorio por separado de acuerdo con la secuencia de clasificación en el entorno local actual.
26027: Por defecto, el formato no está especificado, pero la salida se ordenará alfabéticamente por nombre de símbolo:
- Nombre de biblioteca u objeto, si se especifica −A
- Nombre del símbolo
- Tipo de símbolo
- Valor del símbolo
- El tamaño asociado con el símbolo, si corresponde.
Verifique su .bashrc
archivo para los alias.
alias
para verificar todos los alias actuales.
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 --